728x90
반응형
질문 : 각 그룹의 상위 1 개 행 가져 오기
각 그룹에 대한 최신 항목을 얻고 싶은 테이블이 있습니다. 표는 다음과 같습니다.
DocumentStatusLogs
테이블
|ID| DocumentID | Status | DateCreated |
| 2| 1 | S1 | 7/29/2011 |
| 3| 1 | S2 | 7/30/2011 |
| 6| 1 | S1 | 8/02/2011 |
| 1| 2 | S1 | 7/28/2011 |
| 4| 2 | S2 | 7/30/2011 |
| 5| 2 | S3 | 8/01/2011 |
| 6| 3 | S1 | 8/02/2011 |
테이블은 DocumentID
DateCreated
별로 내림차순으로 정렬됩니다. 각 DocumentID
에 대해 최신 상태를 얻고 싶습니다.
내가 선호하는 출력 :
| DocumentID | Status | DateCreated |
| 1 | S1 | 8/02/2011 |
| 2 | S3 | 8/01/2011 |
| 3 | S1 | 8/02/2011 |
- 각 그룹에서 상위 만 가져 오는 집계 함수가 있습니까? 아래 의사 코드
GetOnlyTheTop
참조하십시오.SELECT DocumentID, GetOnlyTheTop(Status), GetOnlyTheTop(DateCreated) FROM DocumentStatusLogs GROUP BY DocumentID ORDER BY DateCreated DESC
- 이러한 기능이 존재하지 않는 경우 원하는 출력을 얻을 수있는 방법이 있습니까?
- 아니면 처음에는 정규화되지 않은 데이터베이스로 인해 발생할 수 있습니까? 내가 찾고있는 것은 단지 하나의 행이기 때문에 그
status
도 부모 테이블에 있어야합니까?
자세한 내용은 상위 테이블을 참조하십시오.
현재 Documents
테이블
| DocumentID | Title | Content | DateCreated |
| 1 | TitleA | ... | ... |
| 2 | TitleB | ... | ... |
| 3 | TitleC | ... | ... |
상태에 쉽게 액세스 할 수 있도록 상위 테이블이 이와 같아야합니까?
| DocumentID | Title | Content | DateCreated | CurrentStatus |
| 1 | TitleA | ... | ... | s1 |
| 2 | TitleB | ... | ... | s3 |
| 3 | TitleC | ... | ... | s1 |
업데이트 나는 이러한 문제를보다 쉽게 해결할 수 있도록 "apply"를 사용하는 방법을 배웠습니다.
답변
;WITH cte AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY DocumentID ORDER BY DateCreated DESC) AS rn
FROM DocumentStatusLogs
)
SELECT *
FROM cte
WHERE rn = 1
하루에 2 개의 항목을 예상하면 임의로 하나를 선택합니다. 하루에 두 항목을 모두 가져 오려면 대신 DENSE_RANK를 사용하세요.
정규화 여부는 다음을 원하는지 여부에 따라 다릅니다.
- 2 곳에서 지위 유지
- 상태 기록 보존
- ...
현재 상태 기록을 보존합니다. 부모 테이블에서도 최신 상태 (비정규 화)를 원한다면 부모에서 "상태"를 유지하기위한 트리거가 필요합니다. 또는이 상태 기록 테이블을 삭제하십시오.
출처 : https://stackoverflow.com/questions/6841605/get-top-1-row-of-each-group
728x90
반응형
'프로그래밍 언어 > Database' 카테고리의 다른 글
mysqldump에서 덤프 파일을 복원하는 방법 (0) | 2021.09.15 |
---|---|
SQL 원하지 않는 칼럼을 제외하고 SELECT 하는 방법 (0) | 2021.09.09 |
MySQL에서 특정 열 이름이 있는 모든 테이블을 찾는 방법 (0) | 2021.09.07 |
[Database] left, right, outer, inner join의 차이점 (0) | 2021.08.09 |
특정 마이그레이션을 롤백하는 방법 (0) | 2021.07.19 |