Разница во времени между двумя транзакциями в днях по номеру счета - PullRequest
0 голосов
/ 11 апреля 2019
        accountid   txnid   txndate              
        1            176    2015-11-27 00:00:00  
        1            177    2015-12-27 00:00:00  
        472          202    2015-12-01 00:00:00  
        472          203    2015-12-10 00:00:00  

У меня есть приведенная выше структура таблицы, Нужно найти разницу дат между двумя датами транзакции для индивидуального идентификатора счета

Ожидаемый результат

     accountid  txnid   txndate               diffdays_trans
        1   176 2015-11-27 00:00:00     0
        1   177 2015-12-27 00:00:00     30
        472 202 2015-12-01 00:00:00     0
        472 203 2015-12-10 00:00:00     10  

Поскольку txnid 176 является первымВ транзакции нет разницы во времени, txn 177 для учетной записи № 1 появился через 1 месяц, поэтому разница во времени составляет 30 дней, аналогично для учетной записи № 472 транзакция № 202 является первой транзакцией, следовательно, будет 0 дней, и транзакция № 203 появиласьчерез 10 дней, следовательно, дней разница составляет 10

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Вы можете использовать ведущую функцию, чтобы получить следующую дату транзакции.

select *, lead(txndate,1) over(partition by accountid order by accountid) nextdate, datediff(day,txndate, lead(txndate,1) over(partition by accountid order by accountid))days_diff
    from #tbl
1 голос
/ 11 апреля 2019

Чтобы найти разницу между двумя датами транзакции для индивидуального идентификатора счета:

Использование LAG() и DATEDIFF

DECLARE @TestTable TABLE (accountid INT,  txnid INT,  txndate DATETIME);

INSERT INTO @TestTable (accountid, txnid, txndate) VALUES
(1  , 176, '2015-11-27 00:00:00'),  
(1  , 177, '2015-12-27 00:00:00'),  
(472, 202, '2015-12-01 00:00:00'),  
(472, 203, '2015-12-10 00:00:00'); 

SELECT accountid, txnid, txndate, ISNULL(DATEDIFF(DAY, NextDateTime, txndate), 0) AS [diffdays_trans]
FROM (
    SELECT accountid, txnid, txndate, 
           LAG (txndate, 1) OVER (PARTITION BY accountid ORDER BY accountid) AS NextDateTime
    FROM @TestTable
) AS Q

это будет выглядеть так:

accountid   txnid   txndate                  diffdays_trans
-------------------------------------------------------------
1           176     2015-11-27 00:00:00.000  0
1           177     2015-12-27 00:00:00.000  30
472         202     2015-12-01 00:00:00.000  0
472         203     2015-12-10 00:00:00.000  9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...