在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。
0
我知道我可以使用datediffMySQL函数获取两个日期之间的差异,例如
datediff
select datediff('2013-06-03','2013-05-25');
我的基本查询是,select * from mytable where other_col = 'something' order by date; 但是如何进行查询以直接获得示例中所示的结果?(我需要额外的“ days_between_dates”列)。
select * from mytable where other_col = 'something' order by date;
days_between_dates
另请注意,通常ID是有序的,没有空格,但我不能保证。只有我将按升序排序,并按“ other_col”列进行过滤。
您可以按照以下方式进行操作:
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)的日期中最大的日期()之间的差来实现的。
T.date
MAX(TT.date)
WHERE TT.date < T.date
如果没有更小的日期,则使用COALESCE将其设置为0,而不是null。
编辑。在第一行中添加合并以给出0