【问题标题】:Calculate Days difference from Datetime previous row计算与 Datetime 上一行的天数差异
【发布时间】:2019-06-11 17:44:36
【问题描述】:

我有一个使用 Created_at 作为日期时间列创建的 log_file 表,我需要通过 created_at 获取行之间的天数

select id,DATE(created_at), datediff( created_at, prev_date) as diff
from (select t.*,
         (select DATE(t2.created_at)
          from log_file t2
          where t2.id = t.id and
                DATE(t2.created_at) <  DATE(t.created_at)
          order by  t2.created_at desc
          limit 1
         ) as prev_date
  from log_file t
 )  t

但它在diff中给了我Null

    id DATE(created_at) diff
     2 2019-01-16       NULL
     3 2019-01-19       NULL
     4 2019-01-21       NULL

【问题讨论】:

  • 你用的是什么版本的 MySQL?

标签: mysql datediff


【解决方案1】:

如果您使用的 MySQL 版本早于 8+,并且您也不想使用会话变量,那么相关子查询是一种方法。

SELECT
    t1.id,
    t1.created_at,
    DATEDIFF(t1.created_at,
             (SELECT t2.created_at FROM log_file t2
              WHERE t2.created_at < t1.created_at
              ORDER BY t2.created_at DESC LIMIT 1)) AS diff
FROM log_file t1;

您在正确的轨道上,但您的子查询中的 WHERE 子句添加了不正确的条件:

where t2.id = t.id

删除它,您当前的代码甚至可以按原样运行。

【讨论】:

  • 我很好奇,你会如何使用会话变量来做到这一点?
  • @Cid 看看Simulate lag function in MySQL。我发现这些查询写起来很痛苦,而且我不经常写它们,因此我提供了上述解决方案(OP 已经在大部分情况下使用了)。
猜你喜欢
  • 2022-01-16
  • 1970-01-01
  • 2015-12-30
  • 2020-02-19
  • 1970-01-01
  • 2018-07-04
  • 1970-01-01
  • 1970-01-01
  • 2011-04-10
相关资源
最近更新 更多