2011-10-29 45 views
16

Tôi có bảng có cột StartDate, tôi muốn tính toán chênh lệch thời gian giữa hai bản ghi liên tiếp.Tính chênh lệch thời gian giữa hai hàng

Cảm ơn.


@ Đánh dấu Byers và @ Yahia, tôi có bảng yêu cầu như requestId, STARTDATE

requestId startdate    
1   2011-10-16 13:15:56 
2   2011-10-16 13:15:59 
3   2011-10-16 13:15:59 
4   2011-10-16 13:16:02 
5   2011-10-16 13:18:07 

và tôi muốn biết sự khác biệt thời gian giữa requestid 1 & 2 là gì, 2 & 3, 3 & 4 v.v. tôi biết tôi sẽ cần tự tham gia trên bàn, nhưng tôi không nhận được đúng về khoản.

+4

Liên tiếp theo trường nào? Bạn có thể đưa ra một ví dụ về những gì bạn muốn? –

Trả lời

21

Để đạt được những gì bạn đang yêu cầu thử như sau (Cập nhật: sau khi chỉnh sửa từ OP):

SELECT A.requestid, A.starttime, (B.starttime - A.starttime) AS timedifference 
FROM MyTable A INNER JOIN MyTable B ON B.requestid = (A.requestid + 1) 
ORDER BY A.requestid ASC 

NẾU requestid là không liên tiếp thì bạn có thể sử dụng

SELECT A.requestid, A.starttime, (B.starttime - A.starttime) AS timedifference 
FROM MyTable A CROSS JOIN MyTable B 
WHERE B.requestid IN (SELECT MIN (C.requestid) FROM MyTable C WHERE C.requestid > A.requestid) 
ORDER BY A.requestid ASC 
3

Câu trả lời được chấp nhận là đúng nhưng cho sự khác biệt về số. Ví dụ nếu tôi đã 2 timestamps sau:

2014-06-09 09:48:15 
2014-06-09 09:50:11 

Sự khác biệt được cho là 196. Điều này đơn giản là 5011 - 4815. Để có được sự khác biệt thời gian, bạn có thể sửa đổi kịch bản như sau:

SELECT A.requestid, A.starttime, TIMESTAMPDIFF(MINUTE,A.starttime,B.starttime) AS timedifference 
FROM MyTable A INNER JOIN MyTable B ON B.requestid = (A.requestid + 1) 
ORDER BY A.requestid ASC 
Các vấn đề liên quan