如何显示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
任何人都可以帮助我吗?
答案 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,这不应该太难以理解。