【问题标题】:Date difference between records on the same table [duplicate]同一张表上的记录之间的日期差异[重复]
【发布时间】:2013-10-28 21:33:57
【问题描述】:

我有这个:

SELECT 
  journals.id,
  issues.created_on,
  user_id,
  journalized_id,
  journals.created_on
FROM journals, issues 
where issues.id=journals.journalized_id and journalized_id=23363

显示下一个结果:

 id    user_id  journalized_id       created_on  
-----  -------  --------------  -------------------
77996      182           23363  2013-10-07 13:41:45
77998      182           23363  2013-10-07 13:43:08
78000      174           23363  2013-10-07 13:54:26
78137      174           23363  2013-10-08 15:38:43
78269      167           23363  2013-10-09 17:14:26
78328      182           23363  2013-10-10 12:35:02
78442      167           23363  2013-10-11 18:06:13

我想获取同一 journalized_id 的一条“created_on”记录与前一条或下一条记录之间的时间差。

例如:新行上的第一条记录是 0(“2013-10-07 13:41:45”-“2013-10-07 13:41:45”),但下一条记录是(“2013 -10-07 13:43:08"-"2013-10-07 13:41:45"),我不介意几分钟或几小时,等等,你能帮帮我吗?我该怎么做?

谢谢

【问题讨论】:

标签: mysql sql date sliding-window


【解决方案1】:

我没有对应的表,但是这个语法已经检查过了:

更新使用前一个日期和 MySQL::TIMEDIFF():

SELECT journals.id, user_id, journalized_id
  , TIMEDIFF(journals.created_on,
    IFNULL(
      (SELECT MAX(t.created_on)
       FROM journals t
       INNER JOIN issues ON t.journalized_id=issues.id
       WHERE t.journalized_id=23363 AND t.id<journals.id),
    journals.created_on)
  )
FROM journals
INNER JOIN issues ON journals.journalized_id=issues.id
WHERE journalized_id=23363;

这可能会加快使用变量@dprev = 上一个日期:

SET @dprev := 0;
SELECT journals.id, user_id, journalized_id
  , TIMEDIFF(journals.created_on,
    IF(@dprev, @dprev, journals.created_on))
  , @dprev := journals.created_on
FROM journals
INNER JOIN issues ON journals.journalized_id=issues.id
WHERE journalized_id=23363;

?不方便的是还显示了第三列@dprev。

【讨论】:

  • 您好 Jacouh,感谢您的快速回复,我看到这一行:journals.created_on - (SELECT MIN(journals.created_on) FROM journals INNER JOIN issues ON journals.journalized_id=issues.id WHERE journalized_id=23363) 创建:20131007132132.000000(第一行)20131007132295.000000(第二行)20131007133413.000000(第三行)20131008151830.000000 如何将其转换为小时或分钟?谢谢你。 PS:抱歉,我无法正确格式化此文本:(
  • 你好,它不能正常工作:(它总是使用最低记录,2013-10-07 13:41:45 有什么建议吗?谢谢
  • 我错过了理解,附近的日期差异更难。
  • 问题是总是使用第一个日期,我想我应该创建一些临时值来存储以前的?不确定
  • 是的,这将是一个解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 2011-09-29
  • 1970-01-01
  • 2017-03-10
  • 2018-09-14
  • 1970-01-01
相关资源
最近更新 更多