2022-11-25, 2022-11-26, 2022-11-27, 2022-11-30
11월 25일부터 30일까지 27일까지는 연속으로 날자가 있고 28~29일까지는 날자가 없습니다 저장된 데이터가 없는 날인데요
1 2 3 4 5 6 7 8 9 10 | 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일을 조회 하는 쿼리를 작성하고 싶은데 저기서 어떻게 수정해야 할까요?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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 한 것은 테스트용도로 만든 것일 뿐입니다. 실테이블 사용하시면 됩니다.
달력테이블 별도로 미리 만들어 두시고
실제 테이블과 달력테이블을 조인하여 사용하시면 됩니다.
1 2 3 4 5 6 7 | 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 ; |