홈>
표 2
ID DATE
-- ----------
01 2018-04-01
03 2017-06-23
ID를 기준으로 날짜 또는 최소 날짜가없는 ID를 반환하는 SQL을 작성하는 데 어려움을 겪고 있습니다
예 : ID 01, 03 만 01과 03 사이에 03이 더 빠른 날짜를 가지므로 SQL이 03을 리턴해야합니다.
하지만 ID 01,02,03 만 02에는 데이터가 없으므로 SQL은 02를 반환해야합니다.
모든 ID에 대해01,02,03,04 SQL은 02 또는 04를 리턴 할 수 있습니다.
MIN (DATE) 및 NOT EXISTS 절을 가지고 놀았지만 빈 데이터를 반환하는 방법을 모르기 때문에 운이 없습니다.
샘플 SQL은 대단히 감사합니다!
내가 시도한 SQL
SELECT MIN(CASE WHEN DATE IS NULL THEN '1900-01-01' ELSE DATE END)
FROM TABLE2
WHERE ID IN (01,02,03,04)
그러나 SQL 위의 경우 기존 날짜의 최소값을 제공합니다. 기존 날짜 이외의 날짜는 1900-01-01로 기본 설정되지 않습니다.
- 답변 # 1
- 답변 # 2
확인하려는 값이 표 1에 있다고 가정합니다
SELECT MIN(CASE WHEN table2.DATE IS NULL THEN '1900-01-01' ELSE table2.DATE END) as output FROM TABLE1 left join TABLE2 on table1.ID = table2.ID
- 답변 # 3
두 테이블에서 일치하지 않는 값이있는 경우 전체 조인을 사용하십시오
select a.id, a.name, min(isnull(b.date, '1900-01-01')) mindate from #table1 a full join #table2 b on a.id=b.id group by a.id, a.name
- 답변 # 4
어떻게 이런가요? 행운을 빕니다!
SELECT t1.id FROM t1 LEFT JOIN t2 ON t2.id = t1.id LEFT JOIN ( SELECT MIN(COALESCE(date, DATE('2000-01-01'))) AS minimum_date FROM t2 ) minimum_date ON minimum_date = COALESCE(t2.date, DATE('2000-01-01')) ;
왼쪽 외부 조인 사용 :
표 1 t1에서 t1.name, t2.date를 선택하십시오. 왼쪽 조인 t1.id = t2.id의 표 2 t2
그런 다음 t2.date에서 isull을 사용하여 해당 필드에 원하는 것을 고정하십시오.