小编典典

如何获取表中连续记录之间的天数?

sql

在MySQL中,我有一个包含几列的表,其中一列是日期列。我希望能够进行查询,这样我就可以获得一个额外的列,该列显示了当前日期(每一行的日期)和上一行的日期之间的天数。

记录的顺序是按日期,而我是按其他列过滤的。

例如

id  other_col   date        days_between_dates
1   abc     2013-05-01      0
2   abc     2013-05-07      6
3   abc     2013-05-09      2
4   abc     2013-05-19      10
5   abc     2013-05-25      6
6   abc     2013-06-03      9
7   abc     2013-06-14      11

显然,由于第一行没有可比较的内容,因此应显示0

我知道我可以使用datediffMySQL函数获取两个日期之间的差异,例如

select datediff('2013-06-03','2013-05-25');

我的基本查询是,select * from mytable where other_col = 'something' order by date;
但是如何进行查询以直接获得示例中所示的结果?(我需要额外的“ days_between_dates”列)。

另请注意,通常ID是有序的,没有空格,但我不能保证。只有我将按升序排序,并按“ other_col”列进行过滤。


阅读 168

收藏
2021-04-28

共1个答案

小编典典

您可以按照以下方式进行操作:

SELECT T.id, 
       T.other_col, 
       T.yourdate, 
       IFNULL(datediff(T.yourdate,(select MAX(TT.yourdate) 
                                   FROM yourtable TT 
                                   WHERE TT.yourdate < T.yourdate 
                                   AND TT.other_col = 'abc')),0)
FROM yourtable T
where other_col = 'abc';

你可以在这个小提琴中看到它

这是通过计算当前记录的日期(T.date)和MAX(TT.date)小于当前记录的日期(WHERE TT.date < T.date)的日期中最大的日期()之间的差来实现的。

如果没有更小的日期,则使用COALESCE将其设置为0,而不是null。

编辑。在第一行中添加合并以给出0

2021-04-28