처음 누락될 때까지 최대 날짜를 선택하는 Mysql
월별로 첫번째 누락일까지 최대 날짜를 선택해야 합니다.
내 테이블은 이렇게 생겼습니다.
ClientID DATE
1 2018-01-01
1 2018-02-01
1 2018-03-01
1 2018-04-01
1 2018-05-01
1 2018-07-01
1 2018-08-01
1 2018-09-01
1 2018-10-01
1 2018-11-01
1 2018-12-01
2 2018-01-01
2 2018-02-01
2 2018-03-01
2 2018-04-01
2 2018-05-01
2 2018-06-01
2 2018-07-01
2 2018-08-01
2 2018-09-01
2 2018-11-01
2 2018-12-01
아래와 같이 선택하는 가장 좋은 방법은 무엇입니까?
ClientID DATE
1 2018-05-01
2 2018-09-01
나는 이것을 합니다.
update temporaryTable a
(SELECT max(date), clientID FROM table WHERE DATE_FORMAT(date, '%Y%m') = DATE_FORMAT(NOW(), '%Y%m') group by clientID) b on a.clientID = b.clientID
set a.date = b.date;
update temporaryTable a
(SELECT max(date), clientID FROM table WHERE DATE_FORMAT(date, '%Y%m') = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 1 month), '%Y%m') group by clientID) b on a.clientID = b.clientID
set a.date = b.date
where a.date = DATE_FORMAT(NOW(), '%Y%m');
update temporaryTable a
(SELECT max(date), clientID FROM table WHERE DATE_FORMAT(date, '%Y%m') = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 2 month), '%Y%m') group by clientID) b on a.clientID = b.clientID
set a.date = b.date
where a.date = DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 1 month), '%Y%m);
등...24개월 간격까지
나는 그것이 마음에 들지 않고 테이블에 300만개의 기록이 있어서 느립니다.
월과 날짜를 각각의 열로 분리하여 수정할 수 있었습니다.
update table set month_date=MONTH(DATE), year_date = YEAR(DATE);
그다음에 이걸 사용했습니다.
SELECT clientID, year_date, min(month_date) as date_month
FROM table a
WHERE NOT EXISTS (SELECT c.clientID, c.year_date, c.month_date
FROM table c
WHERE c.month_date= a.month_date + 1
AND c.clientID= a.clientID
AND c.year_date= a.year_date and a.year_date= year(now()) and month_date >= 1
GROUP BY a.clientID, a.year_date
이것은 올바른 인덱스로 훨씬 더 빠르게 만들었습니다.
언급URL : https://stackoverflow.com/questions/49951008/mysql-select-max-date-untill-first-missing
'programing' 카테고리의 다른 글
워드프레스의 add_action 함수 (0) | 2023.10.01 |
---|---|
SQL Server:잘못된 버전 661 첨부 (0) | 2023.10.01 |
n++가 n=n+1보다 빨리 실행되는 이유는 무엇입니까? (0) | 2023.10.01 |
AngularJS 보간 오류 (0) | 2023.10.01 |
PL/SQL - where-clause의 선택 조건 - 동적 sql 없이? (0) | 2023.10.01 |