2014-12-23 2 views
1

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있는 행입니다.

이렇게하면됩니다.

누군가 내가 잘못 가고있는 부분을 지적 할 수 있습니까?

감사합니다, 빌로 ...

귀하의 문은 그룹에서

답변

3

제거 x.sn :

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 

은 다음과 같아야합니다

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, y.qty, x.date_tested,x.scrap 
order by x.date_tested desc, x.prod_num 

당신 ' 그것이하고있는 x.sn에 의해 그룹화하기 위해 엔진을 말하면서, 당신은 최소의 것을 원한다. 그룹에서 x.sn을 제거하면 원하는 결과를 얻게됩니다.

+0

대단히 감사합니다. 나는 너무 가까웠다. ... – wallenpb

+0

@wallenpb 예, ** 매우 ** 가까운. 일반적으로 말하면, 집계되는 값을 기준으로 그룹화하지 않으려 고합니다. 'min (x.sn)'이된다. – xQbert

+0

다음과 같은 쿼리가 그룹을 사용하여 동일한 수의 행을 생성하지 않는 이유는 무엇입니까? SELECT prod_num는 SN, date_tested, date_tested SERIAL_NUMBERS FROM 스크랩 은 = 1 및 SN = date_tested DESC 의해 순서 (SERIAL_NUMBERS에서 어디를 serial_numbers.prod_num a.prod_num = MIN (SN)을 선택), NULL prod_num 스크랩 아니다 – wallenpb