Получить последний баланс аккаунта на пользователя на указанную c дату - PullRequest
0 голосов
/ 01 марта 2020

У меня есть следующий запрос в SQL для определения баланса пользовательских счетов на определенную c дату (например: конец года 2019-12-31)

Следующий запрос дает мне все транзакции до этой даты, а затем мне нужно получить значение BALANCE_REAL для каждого USERID до 2019-12-31, когда его последнее действие произошло

Мой текущий запрос выглядит так:

 SELECT
    USERID,
    a.PartyID,
    DATETIME,
    BALANCE_REAL 
FROM
    (
    SELECT
        ACCOUNT_ID + 88888 AS PartyID,
        DATETIME,
        BALANCE_REAL 
    FROM
        admin_all.ACCOUNT_TRAN_ALL 
    WHERE
        DATETIME < '2020-01-01'  
    ) a
    LEFT JOIN ( SELECT PARTYID, USERID FROM external_mpt.USER_CONF ) b ON a.PartyID= b.PARTYID

Это дает следующий вывод:

+--------+---------+-------------------------+-------------------------+
| USERID | PartyID | DATETIME                | BALANCE_REAL            |
+--------+---------+-------------------------+-------------------------+
| Nasa   | 1819895 | 2019-12-30 00:00:04.503 | 1140.000000000000000000 |
+--------+---------+-------------------------+-------------------------+
| Mesha  | 1819753 | 2019-12-30 00:00:06.256 | 0.000000000000000000    |
+--------+---------+-------------------------+-------------------------+
| Mesha  | 1819753 | 2019-12-30 00:00:18.406 | 1400.000000000000000000 |
+--------+---------+-------------------------+-------------------------+
| Nasa   | 1819895 | 2019-12-30 00:00:34.683 | 1638.000000000000000000 |
+--------+---------+-------------------------+-------------------------+
| JO76   | 1819728 | 2019-12-30 00:00:45.046 | 1175.000000000000000000 |
+--------+---------+-------------------------+-------------------------+
| Mesha  | 1819753 | 2019-12-30 00:00:58.896 | 1625.000000000000000000 |
+--------+---------+-------------------------+-------------------------+
| Nasa   | 1819895 | 2019-12-30 00:01:01.876 | 1016.000000000000000000 |
+--------+---------+-------------------------+-------------------------+
| Nasa   | 1819895 | 2019-12-30 00:01:26.456 | 1346.000000000000000000 |
+--------+---------+-------------------------+-------------------------+

Таким образом, мой последний баланс на пользователя должен показывать 1346 для НАСА в 2019-12-30 00: 01: 26.456, 1625 для Мешы в 2019-12- 30 00: 00: 58.896 и 1175 для JO76 в 2019-12-30 00: 00: 45.046

Как мне изменить свой запрос, чтобы достичь этого?

1 Ответ

0 голосов
/ 01 марта 2020

Если я правильно понимаю:

SELECT USERID, PartyID, DATETIME, BALANCE_REAL 
FROM (SELECT u.USERID,
             (a.ACCOUNT_ID + 88888) AS PartyID, a.DATETIME, a.BALANCE_REAL,
             ROW_NUMBER() OVER (PARTITION BY u.USERID ORDER BY a.DATETIME DESC) as seqnum
      FROM admin_all.ACCOUNT_TRAN_ALL JOIN
           external_mpt.USER_CONF u
           ON (a.ACCOUNT_ID + 88888) = u.PARTYID 
      WHERE DATETIME < '2020-01-01'  
    ) a
WHERE seqnum = 1;
...