2017-02-20 2 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

Я думаю, что он хочет получить разница между enddate из строки 1 и startdate из строки 2 и т. д. У вас есть еще один идентификатор? Поэтому я думаю, вам может понадобиться «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 

Так у вас есть два результата в одной строке, и вы можете использовать дифф и Intervall, как вы делаете для одной линии.

Я надеюсь, что эта идея поможет вам в правильном направлении

+0

okey спасибо, я попробую. –

+0

Эй, лучше вы используете «LEFT JOIN». Потому что в противном случае у вас нет результата для вашей первой строки, потому что когда ваш первый id равен 1 «ON b.id = a.id -1». – fGeyer

+0

Это работает только в том случае, если идентификатор предыдущего периода на один раз меньше, чем 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

датированный ожидает только 2 параметра. У вас есть 3 параметра в вашем использовании? – Krishnakumar

+0

@ Кришнакумар 'датифик' ожидает 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 
Смежные вопросы