Получить последнее предыдущее значение записи, если условие истинно - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть следующая таблица:

+ ---------+------------+--------------+-------------+-------------+----------------+
| RecordId | Client     | Subscription | Status      | Date        | Payment Method |
+ ---------+------------+--------------+-------------+-------------+----------------+
| ABC1234  | John Doe   | NetFlex      | Renewed     | 13 Nov 2018 | Credit Card    |
| ABC1233  | Jane Smith | SplitiFy     | Not Renewed | 01 Sep 2018 | NULL           |
| ABC1232  | John Doe   | NetFlex      | Renewed     | 13 Nov 2017 | PayPart        |
| ABC1231  | Jane Smith | SplitiFy     | Renewed     | 01 Sep 2017 | Cash           |
| ABC1230  | John Doe   | NetFlex      | Renewed     | 13 Nov 2016 | Cash           |
+ ---------+------------+--------------+-------------+-------------+----------------+

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

+ ---------+------------+--------------+-------------+-------------+----------------+-------------------------+
| RecordId | Client     | Subscription | Status      | Date        | Payment Method | Previous Payment Method |
+ ---------+------------+--------------+-------------+-------------+----------------+-------------------------+
| ABC1234  | John Doe   | NetFlex      | Renewed     | 13 Nov 2018 | Credit Card    | PayPart                 |
| ABC1233  | Jane Smith | SplitiFy     | Not Renewed | 01 Sep 2018 | None           | Cash                    |
| ABC1232  | John Doe   | NetFlex      | Renewed     | 13 Nov 2017 | PayPart        | Cash                    |
| ABC1231  | Jane Smith | SplitiFy     | Renewed     | 01 Sep 2017 | Cash           | NULL                    |
| ABC1230  | John Doe   | NetFlex      | Renewed     | 13 Nov 2016 | Cash           | NULL                    |
+ ---------+------------+--------------+-------------+-------------+----------------+-------------------------+

Кто-нибудь знает, как создать эту последнюю таблицу?

1 Ответ

0 голосов
/ 13 ноября 2018

Если вы используете SQL Server 2012 или более поздней версии, вы можете использовать LAG, который будет возвращать данные из предыдущей строки в том же наборе результатов без использования самостоятельного объединения

Так что здесь мы можем использовать LAG в сочетании с PARTITION BY, чтобы получить ожидаемый результат

SELECT RecordId,Client,Subscription,Status,Date,PaymentMethod 
       ,LAG (PaymentMethod, 1, 0) OVER (PARTITION BY Client,Subscription ORDER BY Date) 
         AS PreviousPaymentMethod 
 FROM Table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...