查询求和和计数



我的数据类似于这个

Count   years
1     2020-08-11
1    2020-07-11
1    2019-09-01
1    2019-08-16
1    2019-05-04
1    2018-06-11

我正在写一个查询,其中我必须找到例如<=2019年5月4日,我需要找到小于该日期的所有日期的计数,即"2019-05-04"计数将为1,然后将1加到计数上。

我写了这样的查询:

with sum_count as(
select count(*) as 'Counts', years from [practice].[dbo].[People]
where years<='2019-05-04'
group by years)
select sum(Counts) + 1 as Sum
from  sum_count

你能帮我在2020-08-11等所有日期都这样做吗计数应为5,加上6

您只需使用select语句就可以实现这一点,而不需要cte:

Declare @td datetime = '20190504' 
SELECT COUNT([years])+1 FROM [practice].[dbo].[People] Where [years] <= @td

如果这件事你会重复很多,你可以把它作为一个存储过程

CREATE PROC proc_name (@dt datetime)
as    SELECT COUNT([years])+1 FROM [practice].[dbo].[People] Where [years] <= @td

你会称之为

exec proc_name ('20200801') 

如果我理解正确,您只需要一个窗口函数。以下列举了每年内的每一行:

select p.*,
row_number() over (partition by year(years) order by years) as seqnum
from [practice].[dbo].[People] p;

不需要存储过程或辅助功能。

编写过程可以是一种方法,但如果您一心想使用查询,则可以使用此方法。

select count(1)+1 as sum,a.year1
from
(
select distinct year as year1
from [practice].[dbo].[People]

) a 
inner join 
[practice].[dbo].[People] b on b.year<=a.year1
group by a.year1

干杯!!!

最新更新