繁体   English   中英

计算每个单元格与下一个单元格的日期差

[英]Calculate difference in Dates for each cell with next cell

我有一个数据如下:

Order_id       Created_on                       Comment
1           20-07-2015 18:35               Order Placed by User
1           20-07-2015 18:45               Order Reviewed by the Agent
1           20-07-2015 18:50               Order Dispatched
2           20-07-2015 18:36               Order Placed by User

我试图找出两者之间的区别

  1. 第一个和第二个日期
  2. 每个订单的第二个和第三个日期。 如何通过SQL查询获得此信息?

SQL是关于水平关系的-垂直关系不存在。 对于关系数据库,它们只有2行,存储在磁盘上的某个位置,在对结果集应用排序之前,“第一和第二”仅是2条随机选择的行。

在特定情况下,可以在SQL中计算时间差,但出于性能原因,这很少是一个好主意,因为它需要昂贵的自联接或子查询。 只需按照正确的顺序选择正确的数据,然后在C#/ PHP /中进行后处理期间计算差值,无论哪种方法都更加实用和快捷。

我认为您可以使用这样的查询:

SELECT t1.Order_id, t1.Created_on, TIMEDIFF(mi, t1.Created_on, COALESCE(MIN(t2.Created_on), t1.Created_on)) AS toNextTime
FROM yourTable t1
LEFT JOIN yourTable t2 ON t1.Order_id = t2.Order_id AND t1.Created_on < t2.Created_on
GROUP BY t1.Order_id, t1.Created_on

即使已经接受了另一个答案,也要发布此答案-我并不不同意这个已接受的答案-但实际上,使用mySQL变量确实有一种相当简洁的方法。

此查询将以分钟为单位提供各个阶段之间的时间-由于它是两个日期之间的间隔,因此不能表示为日期时间:

SELECT
  Order_id,
  Created_on,
  Comment,
  if (@last_id = Order_id, TIMESTAMPDIFF(MINUTE, @last_date, Created_on), 0) as StageMins,
  @last_id := Order_id,
  @last_date := Created_on
FROM tblData
ORDER BY Order_id, Created_on;

SQL小提琴在这里: http ://sqlfiddle.com/#!9/6ffdd/10

有关MySQL TIMESTAMPDIFF函数的信息,请参见: https : //dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampdiff

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM