2022-11-25, 2022-11-26, 2022-11-27, 2022-11-30
11월 25일부터 30일까지 27일까지는 연속으로 날자가 있고 28~29일까지는 날자가 없습니다 저장된 데이터가 없는 날인데요
SELECT DISTINCT DATE(w1.close_date) + INTERVAL 1 DAY AS missing_date FROM check w1 LEFT JOIN (SELECT DISTINCT close_date FROM check ) w2 ON DATE(w1.close_date) = DATE(w2.close_date) - INTERVAL 1 DAY WHERE w1.close_date BETWEEN '2022-11-20' and '2022-11-30' AND w2.close_date IS NULL;
이렇게 하면 11-28과 12월01이 나오는데요
원하는 값은 11-28,11-29일을 조회 하는 쿼리를 작성하고 싶은데 저기서 어떻게 수정해야 할까요?
WITH RECURSIVE calendar_t AS ( SELECT '2022-11-20' dt UNION ALL SELECT dt + INTERVAL 1 DAY FROM calendar_t WHERE dt < '2022-11-30' ) , check_t AS ( SELECT '2022-11-20' close_date UNION ALL SELECT '2022-11-20' UNION ALL SELECT '2022-11-21' UNION ALL SELECT '2022-11-22' UNION ALL SELECT '2022-11-23' UNION ALL SELECT '2022-11-24' UNION ALL SELECT '2022-11-25' UNION ALL SELECT '2022-11-26' UNION ALL SELECT '2022-11-27' UNION ALL SELECT '2022-11-30' ) SELECT a.dt FROM calendar_t a LEFT OUTER JOIN check_t b ON a.dt = b.close_date WHERE b.close_date IS NULL ;
1. 달력테이블을 미리 만들어서 사용하시면 편리합니다.
2. MySQL 달력 만들기
3. UNION 한 것은 테스트용도로 만든 것일 뿐입니다. 실테이블 사용하시면 됩니다.
달력테이블 별도로 미리 만들어 두시고
실제 테이블과 달력테이블을 조인하여 사용하시면 됩니다.
SELECT a.dt FROM calendar_t a LEFT OUTER JOIN check_t b ON a.dt = b.close_date WHERE a.dt BETWEEN '2022-11-20' AND '2022-11-30' AND b.close_date IS NULL ;