Sql 查找连续的周计数

Sql 查找连续的周计数,sql,sql-server,Sql,Sql Server,我有下表 PLAN_DATA [username],[workdate],[pid] 我想找到连续的几周,其中填充了PID=12。 我正在尝试以下查询以获得预期结果 该表将包含52周不同PID的数据。 我想得到的结果与上面的格式一样,PIDs=12,也就是连续发生3次以上的周数。 连续填充数周的PIDs 12必须进行跟踪是否要将连续几周分组 您可以使用一个在行数和周数之间存在差异的技巧,如下所示: select *, w - RN from ( select *, row_numbe

我有下表

PLAN_DATA
[username],[workdate],[pid]
我想找到连续的几周,其中填充了PID=12。 我正在尝试以下查询以获得预期结果

该表将包含52周不同PID的数据。 我想得到的结果与上面的格式一样,PIDs=12,也就是连续发生3次以上的周数。
连续填充数周的PIDs 12必须进行跟踪

是否要将连续几周分组

您可以使用一个在行数和周数之间存在差异的技巧,如下所示:

select *, w - RN from (
    select *, row_number() over (partition by m order by w asc) as RN
    from(
        select username,DATEPART(w,workdate) as w,DATEPART(m,workdate) as m,pid 
        from plan_data where username='peter' and YEAR(workdate)=2018 
        and pid=12
        group by username,DATEPART(w,workdate),DATEPART(m,workdate),pid
    ) X
) Y

根据您要执行的操作,然后对该数据应用w-RN分组、最小值/最大值等。

您想要什么结果?您的问题不清楚。抱歉,我只想获取PIDs 12连续周的周值列表连续周数(如2,3,4或12,13,14,15,16或…)如果月份与顺序无关,则我已将我的问题编辑为,而且似乎不是因为您有同一组超过5周,通过删除分区——您可能希望在realityThanks中通过pid、用户名等进行分区,以获得答案;但是查询未运行
Msg 156,级别15,状态1,第2行关键字“order”附近的语法不正确。Msg 102,15级,状态1,第8行“X”附近的语法不正确。
对不起,语法中order by之前没有逗号。现在无法测试任何东西:)它正在运行,在我的问题中,如果PID出现在连续3周以上,我希望得到PID;但是答案在一周内就得到了你后来在问题上加了这个。不清楚“PID发生”的意思是,如果您希望周数是连续的,并且只显示3周以上的数字,那么只需使用
w-RN
add count(*)分组,并删除3周以下的任何数字
select *, w - RN from (
    select *, row_number() over (partition by m order by w asc) as RN
    from(
        select username,DATEPART(w,workdate) as w,DATEPART(m,workdate) as m,pid 
        from plan_data where username='peter' and YEAR(workdate)=2018 
        and pid=12
        group by username,DATEPART(w,workdate),DATEPART(m,workdate),pid
    ) X
) Y