Я пытаюсь получить минимальное значение для возврата из функции agregate. Я создал запрос, который выполняется, но не возвращает только одну минимальную строку для каждой группы. В этом примере для каждого prod_num имеется несколько строк, каждый из которых имеет уникальный серийный номер. Это для SQL Server.SQL получение минимального значения из агрегированной функции
Мой код:
SELECT
x.prod_num, Min(x.sn) sn, y.qty, x.date_tested,x.scrap
FROM
serial_numbers x
JOIN
prod_ord y on y.prod_num = x.prod_num
WHERE
x.date_tested IS NOT NULL
AND x.scrap = 1
GROUP BY
x.prod_num, x.sn, y.qty, x.date_tested, x.scrap
ORDER BY
x.date_tested desc, x.prod_num
Мои результаты:
prod_num sn qty date_tested scrap
------------------------------------------------------------
301336662 120214A10338 7 2014-12-09 19:26:41.650 1
301336662 120214A10339 7 2014-12-09 19:26:41.650 1
301336662 120214A10340 7 2014-12-09 19:26:41.650 1
301336662 120214A10341 7 2014-12-09 19:26:41.650 1
301336662 120214A10342 7 2014-12-09 19:26:41.650 1
301336662 120214A10343 7 2014-12-09 19:26:41.650 1
301336662 120214A10344 7 2014-12-09 19:26:41.650 1
301303464 101014A11003 4 2014-10-16 15:18:06.817 1
301303464 101014A11004 4 2014-10-16 15:18:06.817 1
301303464 101014A11005 4 2014-10-16 15:18:06.817 1
301303464 101014A11006 4 2014-10-16 15:18:06.817 1
301293879 100714A10258 15 2014-10-13 13:23:58.923 1
301293879 100714A10259 15 2014-10-13 13:23:58.923 1
301293879 100714A10260 15 2014-10-13 13:23:58.923 1
301293879 100714A10261 15 2014-10-13 13:23:58.923 1
301293879 100714A10262 15 2014-10-13 13:23:58.923 1
301293879 100714A10263 15 2014-10-13 13:23:58.923 1
301293879 100714A10264 15 2014-10-13 13:23:58.923 1
301293879 100714A10265 15 2014-10-13 13:23:58.923 1
301293879 100714A10266 15 2014-10-13 13:23:58.923 1
То, что я на самом деле пытается получить только одна строка для каждого prod_num
, строка с наименьшим sn
.
Нравится это.
Может кто-нибудь указать мне, где я иду не так?
Спасибо, Билл
Большое спасибо! Я был так близко ... – wallenpb
@wallenpb Да, ** ОЧЕНЬ ** близко. Вообще говоря, вы не хотите группировать агрегированные значения; 'min (x.sn)' в этом случае. – xQbert
Как получается, что запрос, такой как следующий, не создает такое же количество строк, как то, что, по моему мнению, будет эквивалентным с помощью группы? ВЫБОР prod_num, Sn, date_tested, утиль ОТ serial_numbers , где date_tested не NULL, и лом = 1 и Sn = (выберите MIN (SN) от serial_numbers а, где a.prod_num = serial_numbers.prod_num) заказ по date_tested по алфавиту, prod_num – wallenpb