홈>
테이블이 이와 같은 요구 사항이 있습니다
Id code TDate Amount
--------------------------------------------
1 A01 11/23/2018 100.20
2 A02 10/25/2018 20.20
3 B01 11/24/2018 10.10
4 C01 11/25/2018 22.12
4 D01 11/21/2018 22.12
그룹 (A01, A02)에서 LATEST_DT_A로 (B01, C01, D01)에서 LATEST_DT_X로 최신 날짜를 얻고 싶습니다. 여기서 코드는 잘 정의되고 수정되었습니다. 각 그룹에서 최신 날짜를 선택하고 싶습니다.
이 테이블에는 많은 양의 데이터가 있으며 사용 사례 설명이 시간 초과되었습니다.
출력은
Id LATEST_DT_A LATEST_DT_X
------------------ ---------
1 11/23/2018 11/25/2018
- 답변 # 1
- 답변 # 2
조건부 집계를 다음과 같이 사용하십시오 :
with tab(Id,code, TDate) as ( select 1,'A01','2018-11-23' union all select 2,'A02','2018-10-25' union all select 3,'B01','2018-11-24' union all select 4,'C01','2018-11-25' union all select 4,'D01','2018-11-21' ) select min(Id) as id, max( case when substring(code,1,1) ='A' then TDate end ) as latest_dt_a, max( case when substring(code,1,1)!='A' then TDate end ) as latest_dt_x from tab;
레스터 에스테르 데모
P.S.Oracle데이터베이스의 경우
from dual
를 추가하십시오.union all
전에 키워드.substring
교체substr
와 함께 ,MySQL의 경우
with tab() as ( .... )
부분을 제거하십시오. - 답변 # 3
Common Table Expression
를 사용할 수 있습니다CASE
그리고MAX()
:CREATE TABLE #Temp ( Id INT ,Code VARCHAR(10) ,TDate DATE ,Amount NUMERIC(18,2) ); INSERT INTO #Temp VALUES (1,'A01','11/23/2018',100.20) ,(2,'A02','10/25/2018', 20.20) ,(3,'B01','11/24/2018', 10.10) ,(4,'C01','11/25/2018', 22.12) ,(4,'D01','11/21/2018', 22.12); WITH CTE AS ( SELECT Id ,CASE WHEN Code IN ('A01','A02') THEN TDate ELSE NULL END LATEST_DT_A ,CASE WHEN Code IN ('B01','C01','D01') THEN TDate ELSE NULL END LATEST_DT_X FROM #Temp ) SELECT MIN(Id) Id ,MAX(LATEST_DT_A) LATEST_DT_A ,MAX(LATEST_DT_X) LATEST_DT_X FROM CTE
또는 간단히
CASE
그리고MAX()
SELECT MIN(Id) Id ,MAX(CASE WHEN Code IN ('A01','A02') THEN TDate ELSE NULL END) LATEST_DT_A ,MAX(CASE WHEN Code IN ('B01','C01','D01') THEN TDate ELSE NULL END) LATEST_DT_X FROM #Temp
관련 자료
- javascript - 셀 값에 따라 html 테이블 셀 선택
- sql - 최근 3 개의 연속 상태가 실패한 테이블에서 레코드 선택
- Elasticsearch에서 두 날짜 사이의 문서 선택
- t sql - 다른 테이블의 열을 기반으로 테이블의 한 열을 업데이트하는 쿼리
- postgresql - SELECT 내에서 반환 된 TABLE의 각 필드를 가져올 수 있습니까?
- postgresql - 임시 테이블을 만들고 삽입 한 다음 pgsql 함수 내에서 선택합니다
- java - 클래스 멤버에 따라 적절한 열거 형 클래스 선택
- abap - 우선 순위를 기반으로 JEST 테이블에서 단일 기본 상태를 얻습니까?
- mysql - PHP는 형식이 지정된 날짜 열이있는 두 날짜 사이의 레코드 선택
- sql - 조인 된 다른 테이블에서 첫 번째 행만 선택
- mysql - 한 테이블에서 다른 테이블로 최신 레코드 만 복사하는 저장 프로 시저
- mysql - SQL JOIN 두 테이블 및 두 번째 테이블은 최신 항목 및 2 ID 만 가져옵니다
- mysql - AND 조건이있는 다른 테이블에있는 경우 선택
- shell - Bash의 변수를 기반으로 특정 TSV 테이블 행에서 값 추출
- javascript - 양식 값 각도를 기반으로 테이블에서 확인란 비활성화
- dataframe - Python에서 마지막 날짜 3 개를 선택하는 방법
- sql - 최신 데이터 만 보유하고 나머지는 테이블에서 삭제하는 효율적인 방법
- postgresql - PSQL cte delete는 삭제 테이블에서 동일한 열을 선택할 때 모호한 것 같습니다
- java - Selenium은 속성을 기반으로 XPath로 요소를 선택할 수 없습니다
- python 3.x - 대체 속성을 기반으로 모든 요소를 선택하는 방법은 무엇입니까? [뷰티풀 스프]
조건부 집계를 사용할 수 있다고 생각합니다 :