在SQL中根据当月1日的字段值选择行

时间:2017-02-24 03:30:37

标签: sql sql-server

在下表中,我想选择一行" 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

2 个答案:

答案 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