我的数据类似于这个
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
干杯!!!