根据选择选择最后一个不同的值和TIMEDIFF?

时间:2015-06-29 21:02:40

标签: mysql

我尝试根据一列中最后一个唯一值的存在时间设置两次DATEDIFF之间的查询。数据结构如下:

  row   ticket_id   create_time      change_time    owner_id     queue_id
 1         11234    5/12/2014 13:47 5/12/2014 13:47        2        4
 2         11234    5/12/2014 13:47 5/12/2014 13:47        2        4
 3         11234    5/12/2014 13:47 5/12/2014 13:47        8        11
 4         11234    5/12/2014 13:47 5/12/2014 13:47        8        11
 5         11234    5/12/2014 14:02 5/12/2014 14:02        3        9
 6         11234    5/12/2014 14:10 5/12/2014 14:10       17        5
 7         11234    5/14/2014 12:00 5/14/2014 12:00       17        5
 8         11234    5/15/2014 12:27 5/15/2014 12:27       17        5

基本上,我想在" change_time"的第6行和第8行之间做一个约会。柱。我想在每个ticket_id的owner_id列或queue_id列中选择最终的不同数字,并计算更改时间的差异。有没有办法可以使用MySQL设置?遗憾的是,使用MAX()函数无法正常工作,因为最高和第二高的更改时间并不总是与最终的队列ID或所有者ID相关联。我知道在SAS中可以使用do循环和计数器+ 1的组合来执行类似的操作,但SQL是否可以这样做?

1 个答案:

答案 0 :(得分:0)

使用子查询使用SQL Select only rows with Max Value on a Column中的一种技术获取每个owner_id的最后ticket_id。与表格一起加入此表以获取此票证和所有者的第一个和最后一个更改时间。

SELECT t1.ticket_id, DATEDIFF(MAX(t1.change_time), MIN(t1.change_time)) AS diff
FROM YourTable AS t1
JOIN (SELECT a.ticket_id, a.owner_id AS last_owner
      FROM YourTable AS a
      JOIN (SELECT ticket_id, MAX(row) AS max_row
            FROM YourTable
            GROUP BY ticket_id) AS b
      ON a.ticket_id = b.ticket_id AND a.owner_id = b.max_row) AS t2
ON t1.ticket_id = t2.ticket_id AND t1.owner_id = t2.last_owner
GROUP BY t1.ticket_id

DEMO