我尝试根据一列中最后一个唯一值的存在时间设置两次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
是否可以这样做?
答案 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