【发布时间】:2017-07-10 20:11:22
【问题描述】:
我必须从包含 ID(用户 ID)、时间戳、余额交易的 SQL 表中生成每日报告。
我的任务:每笔交易都已存储在表中。我必须知道每天所有用户的余额摘要。
例如:
27/06/2016 8:10 User1 50$
27/06/2016 10:22 User1 75$
27/06/2016 11:32 User2 10$
28/06/2016 09:22 User3 40$
28/06/2016 17:35 User1 22$
在这种情况下,结果必须如下:
27/06/2016: 85$ (75+10) 因为最后一个用户 1 的余额 75 和用户 2 10
28/06/2016: 72$ (22+10+40) 因为最后一个 user1 的余额 22 和 user2 10(昨天修改过,但我必须数一下!!!)和 user3 22$
请帮忙。
谢谢
我的解决方案,但不正确:仅在交易当天提供结果,并且不添加前一天的结果。
这是我目前尝试过的请求:
请求 1:
USE DB1;
GO
WITH cte (bin, currency, id, currentbalance, currentledgerbalance, dt) as ( SELECT bin, w.currency, w.id,t.currentbalance, t.currentledgerbalance, t.dt
FROM [DB1].[Tb1] b
inner join [tb2] c
on b.[id]=c.[id]
inner join tb3 w
on c.id=w.id and w.currency=b.currency
inner join [DB1].[tb4] t
on t.walletid=w.id )
, CTE2 (bin,currency,id,currentbalance,currentledgerbalance,dt) as (
select *
from cte
where dt in (select MAX(dt) FROM cte GROUP BY currency,id,DAY(dt), MONTH(dt), YEAR(dt))
)
请求 2:
select currency
,cast(dt as date) as stat_day
,sum(currentbalance) as currentbalance
from CTE2
GROUP BY currency,cast(dt as date)
order by stat_day go
【问题讨论】:
-
如果在 2016 年 6 月 29 日用户 2 的交易再次没有出现怎么办? 2016/06/29/29/06/2016 27/06/2016 的交易是否需要统计 User2?
-
只有最后一次更新需要(因为这是每个账户的状态)是的
-
例如,如果 29 日没有交易,那么我必须得到与前一天相同的结果。或者如果一个新帐户仅在 29 日修改,我必须将这些余额添加到 28 日余额。
标签: sql sql-server