获取每个月的交易余额
Posted
技术标签:
【中文标题】获取每个月的交易余额【英文标题】:Get transactions balance for each month 【发布时间】:2014-11-20 18:22:57 【问题描述】:我有一个包含事务的 2 列表,其中存储了更改时间 (unix_time) 和更改值。
create table transactions (
changed int(11),
points int(11)
);
insert into transactions values (UNIX_TIMESTAMP('2014-03-27 03:00:00'), +100);
insert into transactions values (UNIX_TIMESTAMP('2014-05-02 03:00:00'), +100);
insert into transactions values (UNIX_TIMESTAMP('2015-01-01 03:00:00'), -100);
insert into transactions values (UNIX_TIMESTAMP('2015-05-01 03:00:00'), +150);
要获得当前余额,您需要对所有值求和,如果要从过去获得余额,则如果该值的更改时间小于请求的值,则需要求和,例如:
select
sum(case when changed < unix_timestamp('2013-12-01') then
points
else
0
end) as cash_balance_2013_11,
...
所以每个月都需要一个单独的 SQL 代码。我想拥有可以为我提供所有月份余额的 SQL 代码。 (例如从固定日期到现在)
编辑:
HERE IS SQL FIDDLE
【问题讨论】:
您可以按此处***.com/questions/4342370/… 进行分组 @Horst Walter:据我所知,这将在一个月内给我带来变化。要获得余额,您不仅需要对给定月份的所有先前值求和。 【参考方案1】:你可以只 group by
和 order by
一个月吗?
更新:要获得运行总计,您必须将各个月份加入到一组按月份的总计中,匹配“小于或等于”:-
select
m.single_month
, sum(month_of_change.total_points) as running total_by_month
from
(
select
sum(points) as total_points
, month_of_change
from
(
select
points
, MONTH(FROM_UNIXTIME(t.time_of_change)) as month_of_change -- assumes unix_time
from mytable t
) x
group by month_of_change
) monthly_totals
inner join
(
select distinct MONTH(FROM_UNIXTIME(t.time_of_change)) as single_month
) m
on monthly_totals.month_of_change <= m.single_month
group by m.single_month
(注:未测试)
【讨论】:
据我所知,这将在一个月内给我带来变化。要获得余额,您不仅需要对给定月份的所有先前值求和。 有趣,但是在第三个子查询之后我的大脑溢出了,所以我需要检查一下。我不能投票给你,因为我没有足够的声誉,对不起。 我无法让它工作。我更新了我的问题以使其更清楚。以上是关于获取每个月的交易余额的主要内容,如果未能解决你的问题,请参考以下文章