4

C# と SQL Server 2005 を使用してレポートを作成しています。1 時間あたりのヒット数を表示するだけです。テーブルはとても大きいです。出力は次のようになります。

行番号 | 日付 | 時間 | ヒット数
------------------------------
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/07/05 08:02:24
2012/07/05 08:12:21
2012/07/05 08:23:00
2012/07/05 09:01:00
2012/07/05 09:08:14
2012/07/05 09:12:31
2012/07/05 09:22:27

..etc ご覧のとおり、HitTime フィールドには日付と時刻しかありません。たとえば、8:00 から 8:59 まで、何回ヒットしたかを同じ日付で表示する必要があります。その日の最初の 1 秒から 1 日の最後の 2 秒まで。

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 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]

AM/PM が必要な場合は、次のようにします。

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 に答える
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 に答える