首页 > 解决方案 > 更新表记录将字段设置为有条件地在两行中添加字段

问题描述

表名: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查询吗?

标签: sqlsql-server

解决方案


您可以使用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

推荐阅读