首页 > 解决方案 > 查询求和和计数

问题描述

我的数据是这样的

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 年 8 月 11 日)做同样的事情,计数应为 5,总和为 6

标签: sqlsql-serversum

解决方案


您可以通过 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') 

推荐阅读