불행하게도 group by
및 having
같은 문장에 관한 나의 지식은 매우 제한적이기 때문에 잘하면 당신이 나를 도울 수 :SQL 서버 : 여러 개의 동일한 키를 사용하여 테이블의 최신 날짜를 얻는 방법을
을 나는보기가 - 여기
ID | Artikelbezeichnung1 | Bez2 | mesoyear
_____________________________________________________________________
1401MA70 | Marga ,Saracena grigio,1S,33,3/33,3 | Marazzi | 1344
1401MA70 | Marga ,Saracena grigio,1S,33,3/33,3 | Marazzi | 1356
1401MA70 | Marga ,Saracena grigio,1S,33,3/33,3 | Marazzi | 1356
1401MA71 | Marga ,Saracena beige,1S,33,3/33,3 | Marazzi | 1344
1401MA71 | Marga ,Saracena beige,1S,33,3/33,3 | Marazzi | 1356
1401MA71 | Marga ,Saracena beige,1S,33,3/33,3 | Marazzi | 1356
2401CR13 | Crista,Mahon rojo,1S,33,3/33,3 | Cristacer | 1332
2401CR13 | Crista,Mahon rojo,1S,33,3/33,3 | Cristacer | 1344
그래서 ID
이 고유하지 난 그냥 mesoyear
에서 가장 높은 발을 가진 사람이 필요합니다 발췌 - - (우리는 여기에 몇 가지 유럽인이있는 경우는 Winline/MESONIC의 v021입니다).
Select
c015 as ID,
c003 as Artikelbezeichnung1,
c074 as Bez2,
mesoyear
from
CWLDATEN_91.dbo.v021
group by
c015
having
mesoyear = max(mesoyear)
하지만이 ... 전혀 작동하지 않습니다
메시지 8121, 수준 16, 상태 1, 줄 8
열 'CWLDATEN_91 :내 주먹 솔루션이었다. dbo.v021.mesoyear '는 집계 함수 또는 GROUP BY 절에 포함되어 있지 않으므로 HAVING 절에서 유효하지 않습니다. 이다
그래서 난 그냥에게 메시지 8120, 수준 16, 상태 1, 줄 2
열 'CWLDATEN_91.dbo.v021.c003을'having
문을 제거하고이 "더 나은"갔다 집계 함수 또는 GROUP BY 절에 포함되어 있지 않기 때문에 선택 목록에서 유효하지 않습니다.
그래서 "그룹 기준"에 항목을 추가하여 오류를 제거하려고했습니다. 그리고 효과가있었습니다.
Select
c015 as ID,
c003 as Artikelbezeichnung1,
c074 as Bez2,
max(mesoyear)
from
CWLDATEN_91.dbo.v021
group by
c015, c003, c074
내가 원하는 것을 정확하게 제공합니다.
그러나 올바른 선택에는 약 24 개의 열과 일부 계산이 포함됩니다. group by
...에 모든 열을 추가하는 것만으로는 문제를 해결할 수 없습니까?
누군가 적절한 명령을 찾도록 도와 줄 수 있습니까?
감사합니다.
'ROW_NUMBER'를 사용하여 이미 답변을 얻었으므로 T-SQL의 순위 지정 기능에 대한 몇 가지 링크를 추가 할 예정입니다. - http://msdn.microsoft.com/en-us/library/ms189798.aspx & http://msdn.microsoft.com/en-us/library/ms186734.aspx –
또한 'GROUP BY'만 사용하려는 경우 가능합니다. 하위 쿼리에서 결과를 그룹화 한 다음 모든 그룹화 열을 사용하여 원래 테이블로 다시 JOIN 할 수 있습니다. (하지만 row_number를 권하고 싶습니다) –