Рассчитать DATEDIFF с идентификаторами - PullRequest
0 голосов
/ 09 октября 2019

Я новичок в SQL, поэтому другой поток мне не очень помог.

В моей базе данных есть таблица «Миссия», в которой хранятся идентификаторы и даты каждой выполняемой миссии. Я хочу подсчитать количество дней между каждой записью и представить ее в другом столбце.

Я обнаружил, что для этого лучше всего использовать функцию DATEDIFF.

id,name,campaign_id,real_date,hist_date,mission_status
1,"The Fall of France I",2,2013-12-08,"1940-05-11 11:00:00",2
2,"The Fall of France II",2,2013-12-15,"1940-05-15 15:30:00",2
3,"The Fall of France III",2,2013-12-22,"1940-05-21 15:30:00",2
4,"The Fall of France IV",2,2014-01-05,"1940-05-24 05:30:00",2
5,"The Fall of France V",2,2014-01-12,"1940-06-01 05:30:00",2
6,"The Fall of France VI",2,2014-01-19,"1940-06-12 13:10:00",2

Iхотел бы, чтобы в таблице был указан идентификатор миссии в столбце 1, его историческая дата в столбце 2 и разница между каждой записью даты в днях в столбце 3. Пример.

 id,hist_date,diff
    1,"1940-05-11 11:00:00",0
    2,"1940-05-15 15:30:00",4

1 Ответ

0 голосов
/ 09 октября 2019

Попробуйте это (T-SQL). Он работает, даже если ваш столбец Id не является непрерывным, что может произойти, например, при удалении записи.

SELECT A.Id, A.hist_date, ISNULL(DATEDIFF(Y, Max(B.hist_date), A.hist_date), 0) AS diff 
    FROM Mission AS A
    LEFT JOIN Mission AS B ON B.Id<A.id
    GROUP BY A.Id, A.hist_date

Результат

Id  hist_date               diff
1   1940-05-11 11:00:00.000 0
2   1940-05-15 15:30:00.000 4
3   1940-05-21 15:30:00.000 6
4   1940-05-24 05:30:00.000 3
5   1940-06-01 05:30:00.000 8
6   1940-06-12 13:10:00.000 11
...