4

我正在使用 C# 和 SQL Server 2005 开发报告,我只需要显示我们每小时获得的点击量。桌子很大。输出应如下所示:

行# | 日期 | 时间 | 命中数
-----------------------------------------
1 | 2012 年 7 月 5 日 | 8:00 | 3
2 | 2012 年 7 月 5 日 | 9:00 | 4
3 | 2012 年 7 月 5 日 | 10:00 | 0
4 | 2012 年 7 月 5 日 | 11:00 | 5

我的表是这样的:

“命中时间”:

2012 年 7 月 5 日 08:02:24
2012 年 7 月 5 日 08:12:21
2012 年 7 月 5 日 08:23:00
2012 年 7 月 5 日 09:01:00
2012 年 7 月 5 日 09:08:14
2012 年 7 月 5 日 09:12:31
2012 年 7 月 5 日 09:22:27

..etc 正如您在 HitTime 字段中看到的那样,我只有日期和时间,我需要在同一日期显示,例如从 8:00 到 8:59 我得到了多少次点击,并且应该是一整天,从那天的第一秒开始到一天的最后一秒。

4

3 回答 3

4
DECLARE @current_date DATETIME

SET @current_date = '2012-05-07';

WITH    hours (hr) AS
        (
        SELECT  0
        UNION ALL
        SELECT  hr + 1
        FROM    hours
        WHERE   hr < 23
        )
SELECT  ROW_NUMBER() OVER (ORDER BY hr) AS rn,
        @current_date AS [date],
        CONVERT(VARCHAR(5), DATEADD(hour, h.hr, @current_date), 108) AS [time],
        COUNT(hs.hittime) AS hitcount
FROM    hours h
LEFT JOIN
        hits hs
ON      hs.hittime >= DATEADD(hour, h.hr, @current_date)
        AND hs.hittime < DATEADD(hour, h.hr + 1, @current_date)
GROUP BY
        hr
于 2012-05-16T12:52:58.073 回答
0

这个怎么样?

;WITH aggregation(hit_date, hit_time)
AS
(
SELECT DATEADD(dd, DATEDIFF(dd, 0, hittime), 0)
     , DATEPART(hour, hittime)
FROM test
)
SELECT ROW_NUMBER() OVER (ORDER BY hit_date, hit_time) AS rn
     , CONVERT(VARCHAR,hit_date,101) as [date]
     , CAST(hit_time AS VARCHAR) + ':00' as [time]
     , COUNT(*) as hit_count
FROM aggregation
  GROUP BY hit_date
         , hit_time
于 2012-05-16T13:13:26.483 回答
0
WITH hit_count AS(
select CONVERT(VARCHAR,hit_time,101)as [date], substring(convert(varchar,hit_time,108), 0, 4)+'00' as [time] from hit
)
select date,[time], count(*) as hit from hit_count group by [time],[date]

如果您想要上午/下午,那么:

WITH hit_count AS(
select CONVERT(VARCHAR,hit_time,101)as [date], (substring(convert(varchar,hit_time,100), 12, 4)+'00'+substring(convert(varchar,hit_time,100),18,2)) as [time] from hit
)
select date,[time], count(*) as hit from hit_count group by [time],[date]
GO
于 2012-05-17T10:23:24.983 回答