我有一些数据要分析,其粒度为半小时,但想按 2、3、6、12 小时和 2 天 1 周对其进行分组,以进行更有意义的比较。
|DateTime | Value |
|01 Jan 2013 00:00 | 1 |
|01 Jan 2013 00:30 | 1 |
|01 Jan 2013 01:00 | 1 |
|01 Jan 2013 01:30 | 1 |
|01 Jan 2013 02:00 | 2 |
|01 Jan 2013 02:30 | 2 |
|01 Jan 2013 03:00 | 2 |
|01 Jan 2013 03:30 | 2 |
例如。2小时分组结果将是
|DateTime | Value |
|01 Jan 2013 00:00 | 4 |
|01 Jan 2013 02:00 | 8 |
为了获得 2 小时分组的结果,我想到了这段代码 -
CASE
WHEN DatePart(HOUR,DateTime)%2 = 0 THEN
CAST(CAST(DatePart(HOUR,DateTime) AS varchar) + '':00'' AS TIME)
ELSE
CAST(CAST(DATEPART(HOUR,DateTime) As Int) - 1 AS varchar) + '':00'' END Time
这似乎工作正常,但我想不出用它来概括为 3、6、12 小时。我可以在 6、12 小时内只使用案例陈述并取得结果,但是有什么方法可以概括,以便我可以达到 2、3、6、12 小时的粒度以及 2 天和一周的粒度?通过概括,我的意思是我可以将具有所需粒度的变量传递给同一个查询,而不必用不同的 case 语句构成不同的查询。
这可能吗?请提供一些指示。
非常感谢!