2017-02-20 70 views
0

我對MySQL的日期下表中的示例數據:間隔由兩排日期的MySQL

Start  End   Source 
=====  ===   ==== 
2017-01-01 2017-02-14 T 
2017-02-17 2017-02-28 T 
2017-03-10 2017-03-15 T 

而且我想從結束日期的間隔日期開始日期。例如:

(2017-02-17) - 2017-02-14) = 3 days or (2017-03-10)-(2017-02-28) = 10 days 

任何想法從哪裏開始?我所做的很多閱讀都是爲了讓兩行之間的間隔在一行中間隔。謝謝。

+0

請考慮選擇正確的答案。 – user3378165

回答

0

我認爲他想第1行的enddate和第2行的startdate之間的區別,依此類推。 你有另一個標識符?所以我想你可能需要一個「LEFT JOIN」或一個子查詢來處理這個問題。

SELECT a.id, a.start, a.end, b.start, b.end, b.start - a.end AS `DIFF` 
FROM table1 a 
INNER JOIN table1 b ON b.id = a.id -1 

所以你在一行中有兩個結果,你可以像使用一行那樣使用diff和intervall。

我希望這個想法可以幫助您在正確的方向

+0

okey謝謝你,我會試試看。 –

+0

嘿,你最好使用「LEFT JOIN」。因爲否則你沒有第一行的結果,因爲當你的第一個ID是1「ON b.id = a.id -1」。 – fGeyer

+0

這僅在上期的ID正好是一個比你用比較一個的ID少工作。 – Linkan

0

你正在嘗試實現的是找到在同一表連續兩行之間的時間差。

你可以做到這樣:

SELECT t1.ID, t1.Start, t1.End, 
     datediff(max(t2.End), t1.Start) as minutes 
FROM t as t1 LETF JOIN t as t2 on t1.ID = t2.ID 
     and t2.End < t1.Start 
GROUP BY t1.ID, t1.Start, t1.End 
+0

datediff預計只有2個參數。您的使用中有3個參數? – Krishnakumar

+0

@Krishnakumar'datediff'需要3個參數。 [你可以在這裏看到](https://msdn.microsoft.com/en-us/library/ms189794.aspx) – user3378165

+0

嗨,在MySQL中只有2> [link](https://dev.mysql.com/doc /refman/5.7/en/date-and-time-functions.html#function_datediff) – Krishnakumar

0

,你只需要使用join來計算這些日期

select concat(datediff(n1.start,n2.end),' ',repeat('days',1)) as days 
from table_name n1 
join table_name n2 
on n2.end < n1.start; 

這裏demo

看到,如果你不需要重複「的日子「比單純使用該查詢

select datediff(n1.start,n2.end) 
from your_table n1 
join your_table n2 
on n2.end < n1.start; 
+0

@fGeyer問自己....這裏表中的可用id列 – denny

0

嘗試查詢,讓我知道它的工作或沒有?

SET @dateDiff=NULL;SET @dateDiff2=''; 
SELECT diff.dateDiffR AS dateDifference FROM (
SELECT aa.`end`,aa.`start`,IF(@dateDiff IS NULL,@dateDiff:=aa.end,0) AS try, 
DATEDIFF(aa.`start`,@dateDiff) AS dateDiffR, 
IF(@[email protected],@dateDiff2:[email protected],0) AS try1, 
IF(DATE(@dateDiff)!=DATE(aa.end),@dateDiff:=aa.end,NULL) AS assign 
FROM test.`dateCheck` aa) diff WHERE diff.dateDiffR>0