У меня есть таблица, как показано ниже

id   user_id      bal      createdDate
1    001          100      2015-02-17 16:45:44
2    001          200      2015-02-18 18:45:44
3    002          300      2015-02-20 16:45:44
4    002          800      2015-02-18 18:45:44
5    001          300      2015-03-01 16:20:44
6    002          500      2015-03-17 16:45:44
7    002          200      2015-03-18 18:45:44
8    003          300      2015-03-10 16:45:44
9    003          80       2015-03-18 18:45:44
10   003          200      2015-03-21 16:20:44

Я хочу последний баланс каждого user_id и суммировать их все. В результате я получу сумму последнего баланса комбината от пользователя 001,002,003

  • Эта таблица содержит около 5 миллионов записей
  • В этой таблице сохраняется история баланса аккаунта для каждого пользователя. Таким образом, последняя дата - это последний баланс аккаунта для этого пользователя.

Ниже приведен мой запрос, но я не получил никакого результата, так как мой MySQL верстак замерз.

SELECT (SUM(bal))
FROM hist_bal h1
WHERE h1.createDate = (SELECT MAX(h2.createDate)
FROM hist_bal h2
WHERE h2.user_id = h1.user_id  GROUP BY h2.user_id)
0
Damien 21 Авг 2018 в 11:30

3 ответа

Лучший ответ
SELECT SUM(h1.bal) AS Bal
FROM hist_bal h1 JOIN (SELECT user_id, MAX(h2.createDate) AS createDate
FROM hist_bal h2 GROUP BY h2.user_id) h2 ON h1.user_id = h2.user_id
AND h1.createDate = h2.createDate
2
akshay 21 Авг 2018 в 08:37

ВЫБРАТЬ h1.user_id , СУММА ( h1.bal ) ОТ Hist_bal H1, Hist_Bal H2 ГДЕ h1.createDate = (ВЫБЕРИТЕ МАКС (h2.createDate) и h2.user_id = h1.user_id
ГРУППА ПО h1.user_id

0
yusuf hayırsever 21 Авг 2018 в 09:16

Это должно сделать это просто, не нужно GROUP BY clouse:

SELECT SUM(bal)
FROM hist_bal h1
WHERE h1.createDate = (SELECT MAX(h2.createDate)
FROM hist_bal h2
WHERE h2.user_id = h1.user_id)
3
Csaba Benko 21 Авг 2018 в 09:19
51944650