我有一张桌子记录表,称之为"游戏"
它有一个id和时间戳。
我需要知道的与具体表格无关。为了知道每小时平均玩的游戏数量,我需要知道:
找到第一个是从时间戳中提取小时并按其分组的问题。 对于第二种情况,如果将日期范围四舍五入到最近的一天,则查找此值将很容易(totalgames / numdays)。
不幸的是我无法承担这一点。我需要帮助的是找到一个时间范围内存在的特定小时数。
实施例: 如果范围是今天下午5点到明天晚上8点,那么有一个" 00"小时(午夜到凌晨1点),但两个 17,18,19小时(5-6,6-7,7-8)
感谢您的帮助
编辑:为清楚起见,请考虑以下查询:
我有桌面游戏:
id,daytime
select EXTRACT(hour from daytime) as hour_period, count (*)
from game
where daytime > dateFrom and daytime < dayTo
group by hour_period
这将为我提供在该时间段内分解为每小时块的游戏数量。
为了找到每小时播放的平均游戏数量,我需要确切知道两个时间戳之间有多少特定小时的持续时间。简单地除以天数就不准确了。
编辑:理想的输出看起来像这样:
00 275
01 300
02 255
...
请考虑以下事项:在日期1和日期2之间发生午夜多少次?如果你有1.5天,那并不能保证午夜会发生两次。例如,明天上午6点到明天晚上6点,已经是午夜1点,但是今晚9点到早上9点,从现在开始的两天有2个午夜。
我想要找到的是在两个时间戳之间发生了多少精确小时,所以我可以用它来平均一段时间内玩这个游戏的次数。
答案 0 :(得分:1)
修改强>:
以下查询获取游戏的天数,小时数和数量,输出如下:
29 23 100
29 00 130
30 22 140
30 23 150
然后,外部查询将每个不同小时的游戏数加起来并除以小时数,如下所示
22 140
23 125
00 130
修改后的查询如下:
SELECT
hour_period,
sum(hourly_no_of_games) / count(hour_period)
FROM
(
SELECT
EXTRACT(DAY from daytime) as day_period,
EXTRACT(HOUR from daytime) as hour_period,
count (*) hourly_no_of_games
from game
where daytime > dateFrom and daytime < dayTo
group by EXTRACT(DAY from daytime), EXTRACT(HOUR from daytime)
) hourly_data
GROUP BY hour_period
ORDER BY hour_period;
答案 1 :(得分:0)
如果您需要GROUP BY的内容,可以将时间戳截断为小时级别,如下所示:
DECLARE @Date DATETIME
SET @Date = GETDATE()
SELECT @Date, DATEADD(Hour, DATEDIFF(Hour, 0, @Date), 0) AS RoundedDate
如果您只需要查找总小时数,则可以在几小时内选择DATEDIFF,例如
SELECT DATEDIFF(Hour, '5/29/2014 20:01:32.999', GETDATE())
答案 2 :(得分:0)
不仅提取一天中的小时,而且提取一年中的一天(1-366)。然后分组。如果间隔可能跨越一年,那么将年份本身和组分别加上三个。
year dy hr games
2013 365 23 115
2014 1 00 103