sql中的时间间隔周期

时间:2012-01-16 22:58:27

标签: sql sql-server group-by

如何显示ms sql server中使用最广泛的时间段

我有购买数据,例如:

hours   the number of purchases
10:00       2
12:00       4
13:00       5
14:00       1

我想向大多数买家展示一段时间。因此,结果将是在12:00至13:00之间的最大购买小时数。

这是我的问题:

select  h.hours, day(d.dates)
from hours h, dates d
group by h.hours, day(d.dates)
having count(h.hours) >= all (select count(h2.hours) 
from hours h2, dates d2
group by h2.hours, day(d2.dates))

但结果是:13:00

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

您的购买数据建模不正确,部分原因是您尝试存储计算值(10:00,12:00,13:00),而不是依赖原始数据(日期时间)。

在设计数据模型时考虑您的报告要求

这是解决当前问题的一种方法

您可以拥有一个基本的Purchase表,其中包含一个连续的Purchase_No,一个DateTime字段和一个唯一的Product_Id(例如,您可能还需要一个Quantity字段)

购买时,这是填充了新记录的表

Table: Purchases
Purchase_No, Purchase_DateTime, Product_Id, Quantity

对于“每小时购买报告”,您可以使用此查询填充报告数据集

Select DayOf(p.PurchaseDateTime), HourOf(p.PurchaseDateTime), count(p.*)
From Purchases p
Group By DayOf(p.PurchaseDateTime), HourOf(p.PurchaseDateTime)
Order By count(p.*) Desc

现在你的答案是12:00而不是13:00。所有小时值为12:00的购买显然发生在12:00至13:00之间。

您不需要 12:00-13:00 可靠 每小时需要 12:00 报告。

我不确定如何在您选择的DBMS上实现HourOf和DayOf,这不应该太难以理解。