【问题标题】:Sum latest records from each user汇总每个用户的最新记录
【发布时间】:2018-08-21 08:30:22
【问题描述】:

我有一张如下表

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 的组合最新余额的总和

  • 此表包含大约 500 万条记录
  • 此表保存每个用户的帐户余额历史记录。因此,最新日期是该用户的最新帐户余额。

以下是我的查询,但由于我的 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)

【问题讨论】:

  • 请添加您的表定义。

标签: mysql sql count sum


【解决方案1】:

这应该很简单,不需要GROUP BYclouse:

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)

【讨论】:

    【解决方案2】:
    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
    

    【讨论】:

      猜你喜欢
      • 2016-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多