MySQL查询需求:按wallet_type求和并返回全局最早balance_date
MySQL 查询:按钱包类型汇总余额并返回全局最早日期
需求说明
按wallet_type对available_balance进行SUM汇总,同时所有返回行统一使用整个数据集里最早的balance_date(而非每个wallet_type各自的最早日期)。
原始数据
balance_date,name,wallet_type,available_balance 2020-05-07 13:28:59,wokalap,debit,12345 2020-06-02 08:07:18,wokalap,credit,1116 2020-06-02 08:07:18,wokalap,crypto,113 2020-05-06 59:10:05,wokalap,debit,55795 2020-06-07 08:07:18,wokalap,credit,1448 2020-06-05 08:07:18,wokalap,crypto,546
实现查询语句
假设数据表名为wallet_balances,执行以下SQL:
SELECT (SELECT MIN(balance_date) FROM wallet_balances) AS balance_date, name, wallet_type, SUM(available_balance) AS available_balance FROM wallet_balances GROUP BY name, wallet_type;
逻辑解释
- 子查询
(SELECT MIN(balance_date) FROM wallet_balances)计算出整个表中最早的日期,作为所有行的balance_date值。 - 通过
GROUP BY name, wallet_type按用户和钱包类型分组,对available_balance进行求和汇总。 - 所有行共用全局最早日期,无需关联每个分组的独立日期,直接引用子查询结果即可。
验证结果
执行后会得到符合预期的结果:
| balance_date | name | wallet_type | available_balance |
|---|---|---|---|
| 2020-05-06 59:10:05 | wokalap | debit | 68140 |
| 2020-05-06 59:10:05 | wokalap | credit | 2564 |
| 2020-05-06 59:10:05 | wokalap | crypto | 659 |
内容的提问来源于stack exchange,提问作者wokalap
相关产品推荐
相关产品推荐

