我有一个数据库表,其中包含带有ID和日期 - 日期范围的记录。
最初将某些 ID 的日期导入到截止日期列中。我只对月份感兴趣,像2018-06-01 00:00:00这样的日期代表2018年的整个iune月。(我对日期和时间不感兴趣,设置01天是因为我不能使用 00)。
2019-01-01(日期自)和 2019-01-01(日期至)代表一个月(一月) .
2018-09-01(日期自)和 2018-11-01(日期至)代表几个月的间隔( 9 月 1 日 - 11 月 31 日)
所以我想要的是获取 ID-s,其中有间隙、错过的月份或月份间隔。我该如何用sql解决这个问题?我该从哪方面开始呢?
最佳答案
在 MySQL 5.x 中,您可以使用相关查询(非常慢)来识别差距。查询的粗略概要:
SELECT *
FROM (
SELECT id, start_date, start_date - INTERVAL 1 MONTH AS prev_end_date_exp, (
SELECT end_date
FROM yourdata AS x
WHERE id = t.id AND end_date < t.start_date
ORDER BY end_date DESC
LIMIT 1
) AS prev_end_date_act
FROM yourdata AS t
) AS sq
WHERE prev_end_date_exp <> prev_end_date_act
这将为您提供一个行列表,其中包含其自身与上一行之间的间隙以及日期范围(而不是列表)。
关于mysql - 差距检测 - 识别跳过/错过的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56902438/