У меня есть таблица данных (db - MSSQL):
ID OrderNO PartCode Quantity DateEntered
417 2144 44917 100 18-08-11
418 7235 11762 5 18-08-11
419 9999 60657 100 18-08-11
420 9999 60657 90 19-08-11
Я хотел бы сделать запрос, который возвращает OrderNO, PartCode и Quantity, но только для последнего зарегистрированного заказа.
Из таблицы примеров я бы хотел получить следующую информацию:
OrderNO PartCode Quantity
2144 44917 100
7235 11762 5
9999 60657 90
Обратите внимание, что для заказа 9999 была возвращена только одна строка.
Спасибо!
sql-server
GEMI
источник
источник
MAX(DATE)
возвращает одну строчку для заказа 9999?Ответы:
Если
rownumber() over(...)
есть в наличии ....источник
Лучший способ - это Микаэль Эрикссон, если
ROW_NUMBER()
он вам доступен.Следующий лучший вариант - присоединиться к запросу, согласно ответу Кулариса.
В качестве альтернативы, наиболее простой и понятный способ - это коррелированный подзапрос в предложении WHERE.
Или...
источник
Это самый быстрый из представленных выше запросов. Стоимость запроса составила 0,0070668.
Приведенный выше предпочтительный ответ Микаэля Эрикссона имеет стоимость запроса 0,0146625.
Вы можете не заботиться о производительности для такой небольшой выборки, но в больших запросах все складывается.
источник
Внутренний запрос выбирает все
OrderNo
с максимальной датой. Чтобы получить другие столбцы таблицы, вы можете присоединиться к ним,OrderNo
аMaxDate
.источник
Для MySql вы можете сделать что-то вроде следующего:
источник
{ }
) на панели инструментов редактора , чтобы красиво формат и синтаксис выделить его!И вы также можете использовать этот оператор выбора как запрос левого соединения ... Пример:
Надеюсь, это поможет кому-то, кто это ищет :)
источник
rownumber () over (...) работает, но мне не понравилось это решение по двум причинам. - Эта функция недоступна, если вы используете старую версию SQL, например SQL2000. - Зависимость от функции, и она не читается.
Другое решение:
источник
Если у вас есть проиндексированный идентификатор и номер заказа, вы можете использовать IN: (я ненавижу простоту торговли из-за неясности, просто для экономии некоторых циклов):
источник
Старайтесь избегать использования IN JOIN
источник
Это сработало для меня отлично.
источник
У меня это работает. используйте MAX (CONVERT (date, ReportDate)), чтобы убедиться, что у вас есть значение даты
источник