SQL查询有助于构造结果

时间:2014-01-29 08:46:04

标签: sql sql-server tsql grouping

我有一个包含以下列的表:

timestamp | value | desc

数据示例:

2014-01-27 10:00:00.000 | 100 | 101
2014-01-27 10:00:00.000 | 105 | 101
2014-01-27 11:00:00.000 | 160 | 101
2014-01-27 12:00:00.000 | 200 | 101
...
...
2014-01-28 10:00:00.000 | 226 | 101
2014-01-28 10:00:00.000 | 325 | 101
2014-01-28 11:00:00.000 | 145 | 101

我想要获得的是按小时部分分组但没有合并期间隔。 所以结果将是这样的(在选择中我将传递日期间隔和描述条件,如desc ='101':

结构:

hour | count

数据:

10 | 2    (referring to the 20140127)
11 | 1    (referring to the 20140127)
12 | 1    (referring to the 20140127)
...
...
10 | 2    (referring to the 20140128)
11 | 1    (referring to the 20140128)

我想过使用光标,但我想知道是否有可能在没有它的情况下实现这个结果。

我正在使用 SQL server 2012 SP1

感谢您的关注。

再见 F。

2 个答案:

答案 0 :(得分:1)

您可以使用此功能。这应该工作

SELECT DATEPART(hh,timestamp), COUNT(*) 
FROM tablename 
GROUP BY 
DATEPART(hh,timestamp),
DATETIMEFROMPARTS (YEAR(timestamp),MONTH(timestamp),DAY(timestamp),0,0,0,0,0),
desc HAVING desc ='yourvalue'

答案 1 :(得分:1)

试试这个: -

SELECT Count(*)                  AS [Count], 
       Datepart(hour, timestamp) AS [Hour] 
FROM   yourtable 
GROUP  BY CONVERT(DATE, timestamp), 
          Datepart(hour, timestamp) 
ORDER  BY CONVERT(DATE, timestamp)