当前位置: 首页 > 面试题库 >

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

闾丘德宇
2023-03-14
问题内容

在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”列进行过滤。


问题答案:

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

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



 类似资料:
  • 我有 2 天名称作为输入(例如:“星期五”和“星期一”。我需要从周五和周一(周五、周六、周日、周一)之间的表格中获取所有日期。如果是“星期二”和“星期四”,我需要得到(星期二,星期三和星期四) 我的桌子是 如果日子是星期五和星期一。我的输出应该是 我试过这个 但不工作,帮我解决这个问题。提前致谢

  • 问题内容: 如何获取JavaScript中两个日期之间的天数?例如,在输入框中指定两个日期: 问题答案: 这是快速的实现,作为解决问题中提出的问题的概念证明。它依赖于这样一个事实,您可以通过减去两个日期来获得两个日期之间经过的毫秒数,这会将它们强制为原始数字值(自1970年初以来的毫秒数)。 您应该注意,“常规”日期API(名称中没有“ UTC”)在用户浏览器的本地时区中运行,因此,如果您的用户所

  • 问题内容: 我有一个表 的学生 这样 我想获取所有记录,但不应重复邮政编码。因此,在上述表记录的情况下,应获取记录1和2。将不会提取第3条记录,因为它的邮政编码已在第1条记录中。 问题答案: 以下查询将仅选择不同的“ zip”字段。 以下查询将选择所有字段以及不同的zip字段。

  • 我差点用LocalDateTime引起一个在线bug,直到,例如: 我最初认为他应该2天回来,但结果是1天! 然后我看了相应的源代码,我现在似乎明白了:如果超过一天,少于两天,它只会返回一天。 我想问一下,Java或Spring中是否有满足我需求的工具。 我想让它回到2天,这符合人们的直觉。 当然,我可以包装一个实用程序类来实现这一点,但我想知道Java中是否有可用的实现? 我的业务场景是这样的:

  • 问题内容: 我想找到两个对象之间的天数差异,如果有日期变化,例如如果时钟从23:59-0:00滴答,则应该有天差。 我写了这个 但是它不起作用,因为如果月差额没有价值,它只会在几天之间产生差额。 问题答案: 在Java 8和更高版本中,我们可以简单地使用java.time类。