计算每个细胞与下一个细胞的日期差异

时间:2015-07-20 14:28:29

标签: mysql sql date difference

我的数据如下:

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查询获取此信息?

3 个答案:

答案 0 :(得分:1)

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

在特定情况下,可以计算SQL中的时差,但很少出于性能原因,因为它需要昂贵的自连接或子查询。只需按正确的顺序选择正确的数据,然后在C#/ PHP /后期处理过程中计算差异就更实用,更快。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

虽然已经接受了另一个答案,但发布了这个 - 我并不反对接受的答案 - 但实际上有一个相当简洁的方法来处理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