【问题标题】:How do I search and group by a date column into sets of duration ranges?如何按日期列搜索并分组为持续时间范围集?
【发布时间】:2011-10-22 01:14:48
【问题描述】:

我有一张这样的桌子;

jobID - jobTitle - jobCreatedDate

我想让访问者可以在 Jobs 表中搜索并通过这样的分组列出它,我只想用一个 SQL 查询来完成它:

Date Added
- AnyTime (20)
- 1 day ago (5)
- 2-7 days ago (2)
- 8-14 days ago (0)
- 15-30 days ago (7)

我尝试 Group By "jobCreatedDate" 没有成功,我无法理解必要查询的逻辑。

这是我正在尝试做的一个例子:

感谢您的帮助。

【问题讨论】:

    标签: sql sql-server sorting group-by


    【解决方案1】:

    使用 DATEADD tsql 方法。

    Select ...
    From [Table]
    Where JobCreatedDate between DATEADD(dd, @NumDays, GetDate()) and GetDate()
    

    在此查询中,@NumDays 是一个参数,表示要从当前日期中减去的天数。确保将负数传递给查询。如果您尝试创建非包含范围,则需要使用两个 DATEADD 调用将两个参数传递给查询。

    编辑 我误解了你想做什么。这可能不是最优雅的解决方案,但您可以使用联合查询来实现您的目标。

    Select sum(OneDay) as OneDay, sum(SevenDays) as SevenDays
    From
     (select 1 as OneDay, 0 as SevenDays
      From [table]
      Where JobCreatedDate between DATEADD(dd, -1, GetDate()) and GetDate())
      UNION
     (select 0 as OneDay, 1 as SevenDays
      From[table]
      Where JobCreatedDate between DATEADD(dd, -7, GetDate()) and DATEADD(dd, -2, GetDate()))
    

    【讨论】:

    • 谢谢,但您的查询仅选择 1 个日期之间的数据。我知道如何在开始日期和结束日期之间选择数据,但我需要通过一个查询来选择多个日期之间的数据计数。我想我应该使用 CASE 或者,我不知道 :) 例如;首先选择今天和 1 周前之间的数据计数,然后选择 1 周前和 2 周前,依此类推。然后按数据从高到低对结果进行分组。
    【解决方案2】:

    您需要找到today 和字段JobCreated 之间的日期差异。然后根据值天数的不同,需要将输出相应地分类为不同的类别,以满足您的要求。

    我希望这就是你要找的。​​p>

    SELECT  SUM(1)  AS [AnyTime]
        ,   SUM(CASE WHEN DayCount = 1                  THEN 1 ELSE 0 END)  AS [1 day ago]
        ,   SUM(CASE WHEN DayCount BETWEEN 2 AND 7      THEN 1 ELSE 0 END)  AS [2-7 days ago]
        ,   SUM(CASE WHEN DayCount BETWEEN 8 AND 14     THEN 1 ELSE 0 END)  AS [8-14 days ago]
        ,   SUM(CASE WHEN DayCount BETWEEN 15 AND 30    THEN 1 ELSE 0 END)  AS [15-30 days ago]
    FROM    
    (
        SELECT      JobID
                ,   DATEDIFF(d, JobCreatedDate, GETDATE()) AS DayCount
        FROM        dbo.Jobs
    ) Jobs
    

    屏幕截图显示示例数据和查询输出。

    【讨论】:

    • 正是我需要的!谢谢
    猜你喜欢
    • 1970-01-01
    • 2018-12-30
    • 2012-02-26
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    相关资源
    最近更新 更多