【问题标题】:How to return values from SQL server database within intervals如何在间隔内从 SQL Server 数据库返回值
【发布时间】:2012-07-12 19:27:38
【问题描述】:

您好,我有一个包含 3 列的 SQL Server 数据库Activity[start_date(datetime),end_date(datetime),title(string)] 我想计算一整年,每个月有多少活动有 start_date,我的意思是我想返回 12 个值(12 个月)来计算月份内的活动,谢谢。

【问题讨论】:

    标签: sql-server date return intervals


    【解决方案1】:

    如果start_date 上有索引和/或如果您需要在结果中包含月份,即使该月份没有活动,您可以考虑这个:

    DECLARE @year INT;
    SET @year = 2012;
    
    ;WITH n AS 
    (
      SELECT TOP (12) m = DATEADD(MONTH, ROW_NUMBER() OVER 
        (ORDER BY name)-1, DATEADD(YEAR, @year-1900, 0))
        FROM sys.all_objects ORDER BY name
    )
    SELECT [Month] = n.m, ActivityCount = COUNT(t.title) 
    FROM n 
    LEFT OUTER JOIN dbo.unspecified_table_name AS t
      ON t.start_date >= n.m
      AND t.start_date < DATEADD(MONTH, 1, n.m)
    GROUP BY n.m
    ORDER BY [Month];
    

    (如果您不想在给定月份的活动为零时出现一行,请将LEFT OUTER 更改为INNER。)

    【讨论】:

    【解决方案2】:
    select month(start_date) as Month, count(*) as Count
    from Activity
    where year(start_date) = 2011 
    group by month(start_date)
    order by month(start_date)
    

    【讨论】:

    • 只是一个观察,如果每个月至少有一个活动,这只会返回 12 行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-18
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    相关资源
    最近更新 更多