[SQL] 최대 열 값과 인덱스 값마다 하나 개의 행을 선택
SQL최대 열 값과 인덱스 값마다 하나 개의 행을 선택
다음 필드와 테이블 설치를 :
SKU, EVENTSTARTDATE, EVENTENDDATE, PRICE, (...etc...)
행의 주택 수천 여기에 예제 데이터입니다 (날짜는 YYMMDD는, 세기의 코드는 제외) :
1111111, 101224, 101231, 10.99 1111111, 110208, 110220, 9.99 1111111, 110301, 110331, 8.99 2222222, 101112, 101128, 15.99 2222222, 101201, 110102, 14.99 etc
나는 절 (모든 SKU에 대한 SKU 당 하나 개의 행을 반환해야 SELECT 문을 원하는)의 SKU의 특정 SKU 또는 불완전한 부분 집합을 분리 WHERE없이 최대 EVENTSTARTDATE으로 SKU 당 SELECT 문 반환 한 행을 가지고 싶습니다. 나는 시작 날짜가 현재 날짜로 동일하고, 종료 날짜보다 크거나 현재 날짜로 동일하지만, 내가 먼저 어딘가에 시작해야보다 작거나이라는 기준을 추가하려면 결국 싶습니다.
예 결과 (지금은 단지 최대 날짜를) 원하는 :
1111111, 110301, 110331, 8.99 2222222, 101201, 110102, 14.99 etc.
해결법
-
==============================
1.DB2의 최신 버전에서, 당신은 () 분석 기능 ROW_NUMBER를 사용할 수 있습니다
DB2의 최신 버전에서, 당신은 () 분석 기능 ROW_NUMBER를 사용할 수 있습니다
SELECT * FROM ( SELECT tablename.*, ROW_NUMBER() OVER (PARTITION BY sku ORDER BY eventstartdate DESC) As RowNum FROM tablename) X WHERE X.RowNum=1
각 파티션 (SKU의 군)의 경우, 데이터는 행이 최신 EventStartDate 1부터 ..., 1,2,3- 있도록 eventstartdate DESC하여 다음 순서 번호이다. WHERE 절은 만 SKU 당 최신 선택합니다.
-
==============================
2.GROUP BY 및 HAVING 절에서보세요.
GROUP BY 및 HAVING 절에서보세요.
select sku, max(eventstartdate) FROM TABLE group by sku having eventstartdate <= sysdate
편집 : 문을 HAVING 추가
-
==============================
3.다른 솔루션
다른 솔루션
select distinct f3.* from yourtable f1 inner join lateral ( select * from yourtable f2 where f1.SKU=f2.SKU order by EVENTSTARTDATE desc, EVENTENDDATE desc fetch first rows only ) f3 on 1=1
from https://stackoverflow.com/questions/4937046/select-one-row-per-index-value-with-max-column-value by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 당신은 프레스토 / 아테나의 AT TIME ZONE의 시간대 매개 변수의 열을 사용할 수 있습니까? (0) | 2020.06.19 |
---|---|
[SQL] 날짜 형식을 변환 (0) | 2020.06.19 |
[SQL] 오라클의 외래 키 생성 문제 (0) | 2020.06.19 |
[SQL] 왜 다음은 크게 쿼리 시간을 증가에 가입합니까? (0) | 2020.06.19 |
[SQL] 데이터베이스 내부에 저장된 모든 이미지를 표시하는 방법 (0) | 2020.06.19 |