Максимальная дата, найти баланс для каждого пользователя в 2 таблицах MYSQL - PullRequest
0 голосов
/ 30 мая 2018

У меня есть две таблицы, содержащие балансы пользователей.Одна - это ежедневная таблица, называемая ежедневной, где отображаются только сегодняшние балансы, а вторая, которая объединяет предыдущие балансы пользователей за предыдущие дни.

Дневная таблица выглядит примерно так:

+---------+-------------------------+----------+----------+----------+
| user_id |   transactions_date     | balance1 | Balance2 | Balance3 |
+---------+-------------------------+----------+----------+----------+
| john    | 2018-05-29 10:10:00.100 |      100 |        0 |        0 |
| mike    | 2018-05-29 09:10:01.300 |      677 |        9 |      100 |
| john    | 2018-05-29 11:05:22.450 |      100 |        2 |       99 |
| philip  | 2018-05-29 10:09:40.200 |        4 |        0 |        1 |
| john    | 2018-05-29 08:21:10.090 |        6 |        0 |        0 |
| mike    | 2018-05-29 12:03:30.200 |      900 |        0 |        1 |
| mike    | 2018-05-29 10:05:00.100 |      188 |        0 |        2 |
| philip  | 2018-05-29 05:24:11.320 |       47 |        0 |        3 |
+---------+-------------------------+----------+----------+----------+

и таблица консолидации имеет ту же структуру и выглядит следующим образом:

+---------+-------------------------+----------+----------+----------+
| user_id |   transactions_date     | balance1 | Balance2 | Balance3 |
+---------+-------------------------+----------+----------+----------+
| john    | 2018-05-24 17:10:00.200 |        9 |       11 |      198 |
| mike    | 2018-04-12 08:11:44.800 |      100 |       13 |       13 |
| philip  | 2018-05-21 12:00:59.320 |       99 |     1000 |      122 |
| jenna   | 2018-05-10 08:12:22.211 |     2000 |        0 |       11 |
| jenna   | 2018-05-11 10:09:10.199 |     2999 |        1 |        1 |
| paul    | 2018-04-01 12:12:11.191 |      888 |      100 |      100 |
+---------+-------------------------+----------+----------+----------+

Мой запрос должен найти для каждого пользователя MAX date_transaction, поэтому мне нужен такой результат, как:

+---------+-------------------------+----------+----------+----------+
| user_id |   transactions_date     | balance1 | Balance2 | Balance3 |
+---------+-------------------------+----------+----------+----------+
| john    | 2018-05-29 11:05:22.450 |      100 |        2 |       99 |
| mike    | 2018-05-29 12:03:30.200 |      900 |        0 |        1 |
| philip  | 2018-05-29 10:09:40.200 |        4 |        0 |        1 |
| jenna   | 2018-05-11 10:09:10.199 |     2999 |        1 |        1 |
| paul    | 2018-04-01 12:12:11.191 |      888 |      100 |      100 |
+---------+-------------------------+----------+----------+----------+

Мне удалось получить результат с помощью этого запроса для ежедневной таблицы, чтобы получить максимальную дату для пользователя:

SELECT
    t2.user_id ,
    t2.balance1 ,
    t2.balance2,
    t2.balance3
FROM
    (
        SELECT
            user_id ,
            MAX(transactions_date) AS max
        FROM
            daily
        GROUP BY
            user_id
    ) t1 ,
    (
        SELECT
            user_id ,
            balance1 ,
            balance2 ,
            balance3 ,
            transactions_date
        FROM
            daily
    ) t2
WHERE
    t1.user_id = t2.user_id
AND t1.max = t2.transactions_date

Я не знаю, есть ли лучший способ сделать этот процесс ежедневно на столе в первую очередь.Затем я попытался получить максимальное значение date_transaction, присоединив user_id к дневной таблице и таблице консолидации без результата.

Я добавил Mysqlfiddle

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 30 мая 2018
SELECT 
    A.*
FROM
    (SELECT * FROM daily
     UNION ALL
     SELECT * FROM consolidation) A 
JOIN
    (SELECT 
        T.user_id, MAX(transactions_date) max_user_trans_date
     FROM
        (SELECT * FROM daily
         UNION ALL
         SELECT * FROM consolidation) T
     GROUP BY T.user_id) B
ON A.user_id=B.user_id AND A.transactions_date=B.max_user_trans_date; 

Посмотреть запустить на скрипте SQL .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...