아래 표를 참조하십시오 ... changeno를 기반으로 한 최신 ID의 데이터 만 선택하려면 어떻게합니까? 나는이 결과를 원하는 것이주어진 행에서 ID의 최신 레코드 만 선택하십시오.
+----+--------------+------------+--------+
| id | data | changeno | |
+----+--------------+------------+--------+
| 1 | Yes | 1 | |
| 2 | Yes | 2 | |
| 2 | Maybe | 3 | |
| 3 | Yes | 4 | |
| 3 | Yes | 5 | |
| 3 | No | 6 | |
| 4 | No | 7 | |
| 5 | Maybe | 8 | |
| 5 | Yes | 9 | |
+----+---------+------------+-------------+
...
+----+--------------+------------+--------+
| id | data | changeno | |
+----+--------------+------------+--------+
| 1 | Yes | 1 | |
| 2 | Maybe | 3 | |
| 3 | No | 6 | |
| 4 | No | 7 | |
| 5 | Yes | 9 | |
+----+---------+------------+-------------+
나는 현재이 SQL 문이
...
SELECT ID, 데이터, MAX (changeno) 표 GROUP BY FROM changeno로 신분증;
분명히 내가 원하는 것을 반환하지 않습니다. 이것은 aggrerate 기능으로 인해 오류를 리턴해야합니다. GROUP BY 절 아래에 필드를 추가하면 작동하지만 원하는 결과를 반환하지 않습니다. SQL 문은 내가 생각할 수있는 가장 가까운 것입니다. 아무도 나를 도울 수 있다면 고맙겠습니다. 사전에 감사합니다 :)
안녕하세요. 실제로 작동합니다. 고마움 만 :) 그러나 당신은 그 ROW_NUMBER가 PARTITION 절과 함께 어떻게 작동하는지 조금 설명 할 수 있겠습니까? –
PARTITION BY는 GROUP BY와 같습니다. id의 고유 한 값마다 해당 행을 모두보고 changeno가 정렬 한 행 번호를 큰 값에서 작은 값까지 적용합니다. 그래서 예를 들어 id 3을보고 4, 5, 6의 changeno 값을가집니다. 따라서 내림차순으로 순서를 지정하고 1에서 6, 2에서 5, 3에서 4를 적용합니다. 각 이드에 대해이 작업을 수행합니다. 외부 쿼리는 적용된 행 번호가 1 인 행만 가져옵니다. 추가 정보 [여기] (http://technet.microsoft.com/en-us/library/ms186734.aspx) 및 [여기] (http : //technet.microsoft.com.com/ko-ko/library/ms189461.aspx). –
이것은 이상한 일이지만, 나는 당신이 말한 것을 바탕으로 모든 것을 실제로 이해했습니다. 나는 내가 afterall이라고 생각하는만큼 바보가 아니다 :) @Aaron Bertrand. 감사합니다 억 시간이 시간 : –