在下表中,我想选择一行" Days" = 1但该帐户在该月的第1天应该有Days = 0。
Account| Date | Days
-------|------|-----
A | 1/3/2015 | 0
A | 5/3/2015 | 1
A | 9/3/2015 | 10
B | 1/3/2015 | 30
B | 3/3/2015 | 1
B | 6/3/2015 | 12
结果应该是第2行
A 5/3/2015 1
在1日A有0天但B有30天因此我只想要账户A
答案 0 :(得分:0)
此代码适用于ORACLE,但请查看。想法是:
SELECT * 来自账户 在哪几天= 1 和ACC IN(选择帐户 来自账户 ACC_DATE = TRUNC(ACC_DATE,' MONTH')和DAYS = 0)
尝试转换为MSSQL并运行。
答案 1 :(得分:0)
使用带有max
的窗口函数case
来判断是否存在day = 1和Days = 0的行,如果有,请使用row_number
返回第二行该月中该帐户的日期增加顺序。
select *
from (
select
t.*,
max(case when day(date) = 1 and Days = 0 then 1 end)
over (partition by Account, month(Date), year(Date)) flag,
row_number() over (
partition by Account, month(Date), year(Date)
order by Date
) rn
from your_table t
) t where flag = 1 and rn = 2