날짜와 날짜 사이에 빈날 이 있는지 확인 하는 방법 0 3 1,680

by harus4 [MySQL] mysql 날 검색 [2022.12.07 14:41:17]


 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일을 조회 하는 쿼리를 작성하고 싶은데 저기서 어떻게 수정해야 할까요?

 

by 마농 [2022.12.07 15:30:30]
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
;

 


by harus4 [2022.12.07 15:45:54]

MySQL 5.7.12 버전사용중입니다

MySQL server version for the right syntax to use near 'RECURSIVE calendar_t
mysql 버전이 낮아서 안되는거 같습니다 ㅜㅡㅜ
만약 된다면 union all은 하나씩 넣어줘야 하는건가요?


by 마농 [2022.12.07 16:00:59]

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
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입