设一个表中记录了用户的积分变动,默认为加
| 主键 | 用户id | 变动日期 | 变动数值 |
|---|---|---|---|
| 1 | 0001 | 2017-01-01 00:00:00 | 10 |
| 2 | 0002 | 2017-01-01 04:10:00 | 20 |
| 3 | 0001 | 2017-02-01 05:04:00 | 400 |
| 4 | 0001 | 2017-02-05 00:00:00 | 10 |
| 5 | 0002 | 2017-04-01 00:00:00 | 30 |
而我如果需要查出各用户各时间段的资金变动总和,如下表所示
| 主键 | 用户id | 变动日期 | 变动数值 | 变动总和 |
|---|---|---|---|---|
| 1 | 0001 | 2017-01-01 00:00:00 | 10 | 10 |
| 2 | 0002 | 2017-01-01 04:10:00 | 20 | 20 |
| 3 | 0001 | 2017-02-01 05:04:00 | 400 | 410 |
| 4 | 0001 | 2017-02-05 00:00:00 | 10 | 420 |
| 5 | 0002 | 2017-04-01 00:00:00 | 30 | 50 |
这种sql改如何书写?我用的是mysql5.6,结果集顺序没有要求。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
select sum(变动数值) from table where 变动日期 >=yymmdd and 变动日期 <=yymmdd group by 用户id
这样的需求建议到程序中处理性能会好很多
当然mysql 也可以直接查询出结果
select ccc.* ,
if(@lag_uuid = 用户id ,@lag:=@lag+变动数值,@lag:=变动数值) 变动总和,
(@lag_uuid := 用户id) lag_uuid
from
(SELECT * FROM tbl_ WHERE 1=1 order by 用户id ) ccc,(select @lag:=0,@lag_uuid:=null) tb_lag
order by ccc.id