计算每个单元格与下一个单元格的日期差异
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
我正在尝试找出
之间的区别
- 第一次和第二次约会
- 每个订单的第二个和第三个日期。我如何通过 SQL 查询获得此信息?
SQL 是关于水平关系——垂直关系不存在。对于关系数据库,它们只是 2 行,存储在磁盘上的某个位置,并且在您对结果集应用排序之前,'first and second' 只是 2 个随机选择的行。
在特定情况下,可以在 SQL 内计算时差,但出于性能原因,这不是一个好主意,因为它需要昂贵的自连接或子查询。只需按正确的顺序选择正确的数据,然后在 C#/PHP/whatever 的后处理过程中计算差异就更实用也更快。
我想你可以使用这样的查询:
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 Fiddle 这里:http://sqlfiddle.com/#!9/6ffdd/10
关于 mySQL TIMESTAMPDIFF 函数的信息:https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampdiff
我有一个数据如下:
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
我正在尝试找出
之间的区别- 第一次和第二次约会
- 每个订单的第二个和第三个日期。我如何通过 SQL 查询获得此信息?
SQL 是关于水平关系——垂直关系不存在。对于关系数据库,它们只是 2 行,存储在磁盘上的某个位置,并且在您对结果集应用排序之前,'first and second' 只是 2 个随机选择的行。
在特定情况下,可以在 SQL 内计算时差,但出于性能原因,这不是一个好主意,因为它需要昂贵的自连接或子查询。只需按正确的顺序选择正确的数据,然后在 C#/PHP/whatever 的后处理过程中计算差异就更实用也更快。
我想你可以使用这样的查询:
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 Fiddle 这里:http://sqlfiddle.com/#!9/6ffdd/10
关于 mySQL TIMESTAMPDIFF 函数的信息:https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampdiff