【发布时间】:2014-08-04 03:54:54
【问题描述】:
这个问题可能看起来很简单而且重复,因为我是SQL初学者,所以我一直坚持这个问题。
我创建了一个表变量来以 24 小时格式存储小时范围。这是代码
DECLARE @TIMERANGE TABLE ([TIME] NVARCHAR(MAX))
;with hrs (time)
AS
(
SELECT 0
UNION ALL
SELECT time+1
FROM hrs WHERE time<23
)
INSERT INTO @TIMERANGE select
RIGHT ('0000' + CONVERT(VARCHAR, time), 4) + '-' + RIGHT('0000' + CONVERT(VARCHAR, time + 1), 4) AS [TIME]
from hrs
这个表的输出是:
TIME
0000-0001
0001-0002
0002-0003
0003-0004
0004-0005
0005-0006
0006-0007
0007-0008
0008-0009
0009-0010
0010-0011
0011-0012
0012-0013
0013-0014
0014-0015
0015-0016
0016-0017
0017-0018
0018-0019
0019-0020
0020-0021
0021-0022
0022-0023
0023-0024
条件是,我想将它与具有特定条件的真实表连接起来
Id Date Time Score
1 2008-01-01 00:05 15
2 2008-01-01 00:15 20
3 2008-01-02 10:15 05
4 2008-01-02 11.00 55
我想找到特定时间范围内的分数总和,例如,00.15 将落在时间范围 0000-0001 中。
期望的输出是:
Time Range Score
0000-0001 25
........ ..
........ ..
请帮忙
【问题讨论】:
-
我可能不完全理解你的问题,但你有什么理由不只是在
DATEPART(HOUR, Time)上用COUNT打电话给GROUP BY? -
有时会没有针对特定时间的记录,比如0002-0003时间范围内没有记录。在这种情况下,我想将它们显示为空。当我使用 DATEPART 时,我得到的只是时间的一部分,而不是时间范围,如果我的理解是真的
-
DATEPART() 函数用于返回日期/时间的单个部分,例如年、月、日、小时、分钟等。
-
更改您的时间范围 TR 表,使其包含“开始时间”和“结束时间”。然后您可以通过
T1.time between TR.start_time and TR.end_time加入您的真实表 T1。 Time 和 Date 是 BTW 保留字,因此您可能希望将列的名称替换为更具体的名称。 -
我需要在单列时间范围内输出 :( 我必须在这里使用 TIME 因为即使在某个时间范围内没有记录,也必须将它们显示为空
标签: sql sql-server sql-server-2008