Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将本周与前一周进行比较_Sql Server - Fatal编程技术网

Sql server 将本周与前一周进行比较

Sql server 将本周与前一周进行比较,sql-server,Sql Server,我有一个按周列出的成员列表,我需要在SQL Server中将当前周与前一周进行比较。第一个图像是数据在表中的状态,第二个图像是我想要的结果。我想也许每周做一次CTE,然后比较它们。谢谢 一种非常简单的方法,将前一周没有的mem\u id值计算为new,如下所示: declare @t table(mem_id int,weeknum int, yearnum int); insert into @t values(1,1,2020),(2,1,2020),(1,2,2020),(3,2,202

我有一个按周列出的成员列表,我需要在SQL Server中将当前周与前一周进行比较。第一个图像是数据在表中的状态,第二个图像是我想要的结果。我想也许每周做一次CTE,然后比较它们。谢谢


一种非常简单的方法,将前一周没有的
mem\u id
值计算为
new
,如下所示:

declare @t table(mem_id int,weeknum int, yearnum int);
insert into @t values(1,1,2020),(2,1,2020),(1,2,2020),(3,2,2020),(2,3,2020),(3,3,2020),(4,3,2020);

with p as
(
    select yearnum
          ,weeknum
          ,case when lag(weeknum,1) over (partition by mem_id order by yearnum,weeknum) = weeknum-1 then 0 else 1 end as p
    from @t
)
select yearnum
      ,weeknum
      ,sum(p) as new
      ,count(1) as total
from p
group by yearnum
        ,weeknum
order by yearnum
        ,weeknum;
输出
一种非常简单的方法,将前一周未出现的所有
mem\u id
值计算为
new
,如下所示:

declare @t table(mem_id int,weeknum int, yearnum int);
insert into @t values(1,1,2020),(2,1,2020),(1,2,2020),(3,2,2020),(2,3,2020),(3,3,2020),(4,3,2020);

with p as
(
    select yearnum
          ,weeknum
          ,case when lag(weeknum,1) over (partition by mem_id order by yearnum,weeknum) = weeknum-1 then 0 else 1 end as p
    from @t
)
select yearnum
      ,weeknum
      ,sum(p) as new
      ,count(1) as total
from p
group by yearnum
        ,weeknum
order by yearnum
        ,weeknum;
输出
请将任何数据作为SQL DDL语句而不是图像添加到您的问题中,因为这使我们可以更轻松地帮助您,而不必手动写出图像中的内容。那么,您如何定义
新成员?如果一个成员在第22周出现,在第23周缺席,然后在第24周返回,他们的类是新的吗?请将任何数据作为SQL DDL语句而不是图像添加到您的问题中,因为这使我们可以更轻松地帮助您,而不必手动写出图像中的内容。那么,您如何定义
新成员?如果会员在第22周出席,在第23周缺席,然后在第24周再次回来,他们的课程是否是新的?就是这样!非常感谢。我以前从未用过Lag。计数(1)中的“1”是什么?它只是一个伪值,因此SQL Server不会从列中提取该值。在某些情况下,这可以节省非常小的处理量,但更重要的是,无论行中的数据如何,都会对行进行计数。如果在10行以上运行
count(colname)
,其中2个
colname
值为
null
,则
count
返回值将为8,因为
null
值被忽略。再次感谢。非常感谢,就是这样!非常感谢。我以前从未用过Lag。计数(1)中的“1”是什么?它只是一个伪值,因此SQL Server不会从列中提取该值。在某些情况下,这可以节省非常小的处理量,但更重要的是,无论行中的数据如何,都会对行进行计数。如果在10行以上运行
count(colname)
,其中2个
colname
值为
null
,则
count
返回值将为8,因为
null
值被忽略。再次感谢。非常感谢。