sql - 更新表记录将字段设置为有条件地在两行中添加字段
问题描述
表名:TraderCapital
列:
Trader (varchar),
Currency(varchar),
Date(int i.e. yyyymmdd format),
Capital(int)
主键字段:交易者、货币
Trader, Currency, Date, Capital
A, USD, 20190605, 100
A, USD, 20190606, 100
B, INR, 20190605, 200
B, INR, 20190606, 200
C, USD, 20190606, 100
D, USD, 20190601, 100
我想在将 20190606 的资本汇总到 20190605 的资本后更新我的表。因此,所需的输出应如下所示:
Trader, Currency, Date, Capital
A, USD, 20190605, 200
B, INR, 20190605, 400
C, USD, 20190606, 100
D, USD, 20190601, 100
你能帮我写同样的sql查询吗?
解决方案
您可以使用LAG()
. 在第一步中,我创建了一个列来检查一行是否有前一天。后来我使用此列 ( previousDay
) 对行进行分组。
with previousDay as (
select
*
,LAG(date) over (partition by trader, currency order by date asc) as PreviousDay
from TraderCapital
)
select
trader
,currency
,case when PreviousDay is not null then dateadd(day, -1, date) else date end as date
,sum(Capital) as capital
from previousDay
group by case when PreviousDay is not null then dateadd(day, -1, date) else date end
,trader
,currency
推荐阅读
- python-3.x - 通过 python 脚本访问 confluence 页面
- excel - 如何使用 VBA 根据某些标准将粘贴数据从一个工作簿复制到另一个(特定单元格)?
- reactjs - 如何对授权用户隐藏部分 react.js 应用程序?
- python - 将网络抓取的表格放入 excel(selenium,python)
- javascript - 拖动幽灵元素时如何触发悬停?
- kubernetes - 为什么harbor在网页登录时不允许使用405方法
- c# - Microsoft Graph API 批量请求限制(Graph SDK)
- ethereum - 再次在混音上部署智能合约,状态变量再次回到初始状态
- c - 将大小为 N 的一维二进制数组写入 (N/2, N/2) 大小的 PPM 图像
- aem - AEM - 花岗岩字段更改后刷新数据源