首页 > 解决方案 > 使用 Row_Number 函数

问题描述

我的数据看起来像这样 -

clientid    calendar    Num
18161       20170518    1
18161       20170705    0
18161       20170718    0
43431       20150518    0

客户的第一个 0Num18161第二个日历上。客户的第一个 0Num43431第一个日历 ( 20150518) 上。我想要一个 SQL 来生成这个输出 -

clientid    FirstZero
18161       2 
43431       1

这是我到目前为止所拥有的,但是正在为 all 生成 row_number calendarsNum对于特定客户,我第一次需要它变成零。

SELECT clientid, calendar,
Row_Number() Over (order by clientid) As FirstZero
from DAILY
where num = 0  
and clientid = 18161

标签: sqlwindow-functions

解决方案


干得好:

select
  clientid,
  min(pos) as firstzero
from (
  select
    clientid,
    num,
    row_number() over(partition by clientid order by calendar) as pos
  from daily
) x
where num = 0
group by clientid

推荐阅读