例如:
id | date
---+------------
1 | 2011-01-01
2 | 2011-01-02
3 | 2011-01-15
4 | 2011-01-20
5 | 2011-01-10
6 | 2011-01-30
7 | 2011-01-03
8 | 2011-02-09
9 | 2011-02-10
10 | 2011-02-11
11 | 2011-02-12
12 | 2011-02-15
13 | 2011-02-19
14 | 2011-02-21
15 | 2011-02-22
16 | 2011-02-23
17 | 2011-02-24
例如,这里有一些行(日期现在可能总是按顺序排列)。 可能出现同一日期的多个记录。我想获取具有连续日期的行。例如;对于以上条目,我想要类似的东西:
id | date
---+------------
1 | 2011-01-01
2 | 2011-01-02
7 | 2011-01-03
8 | 2011-02-09
9 | 2011-02-10
10 | 2011-02-11
11 | 2011-02-12
14 | 2011-02-21
15 | 2011-02-22
16 | 2011-02-23
17 | 2011-02-24
我试过类似的方法:
SELECT a.id, a.date FROM tbl a
LEFT JOIN tbl b on a.user_id = b.user_id AND a.date = b.date + INTERVAL 1 DAY
但它没有给我正确的结果,而且速度也慢得多。所以请指导我一些正确的过程并且更快。
注意:它实际上是一个考勤计划,所以多个用户应该有相同日期的记录。所以我需要所有用户的所有具有连续日期的记录。
最佳答案
首先在日期列上创建索引:
create index idx_tbl_date on tbl(date);
然后,我认为以下将做你想做的事:
select t.*
from tbl t
where exists (select 1 from tbl t2 where t2.date = t.date + interval 1 day) or
exists (select 1 from tbl t2 where t2.date = t.date - interval 1 day);
这两个 exists 子句确保您获得序列中的第一个和最后一个日期。使用索引,这应该表现良好。
关于php - MySQL:获取具有连续日期的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28608533/