좋아, 그룹별로 SQL 명령을 수행 할 때 집계가없는 특정 필드를 가져올 수는 없다는 것을 알았지 만 집계를 수행하는 경우 나에게 보이는 것처럼 보입니다. 고유 한 것으로 보장되는 기본 키에는 해당 열의 다른 행을 가져 오는 방법이 있어야합니다. 이런 식으로 뭔가 :그룹이있는 기본 키에서 집계 행 검색
SELECT Max(id),
foo,
bar
FROM mytable
GROUP BY value1,
value2
그래서 ID가 고유 보장, 그래서 foo는 바 정확히 1 값을가집니다,이 같은 쿼리를 생성하는 방법은 무엇입니까?
내가 이것을 시도하지만,이 경우 MyTable에 행 수백만을 가지고 있으며, 이것에 대한 런타임은 받아 들일 수 : 멀리 거슬러
SELECT *
FROM mytable
WHERE id IN (SELECT Max(id)
FROM mytable
GROUP BY value1,
value2)
AND ...
가 이상적으로 적어도 작동하는 솔루션을 싶습니다 SQL 서버 2005,하지만 이후 버전에서 더 나은 솔루션이 있다면 그들도 듣고 싶습니다.
CREATE NONCLUSTERED INDEX idx_GroupBy ON mytable (value1, value2)
IN
당신이 많은 행이있는 경우 속도가 느린 경향이 될 수
에서 테이블을 조회 할 필요가 없습니다 있도록
이이 NCI는 전체 쿼리를 다룰 것입니다 알아. 그리고 두 번째 질의는'GROUP BY '와 함께'MAX'를 사용할 것이므로 첫 번째 해결 방법과 같습니다. 그래서 그것은 주위의 일로 보이지 않습니다. –
"partition by"문을보고 싶을 수도 있습니다. – jt234