2012-01-16 83 views
0

如何顯示的時間段使用的最廣泛的MS SQL Server中使用時間間隔週期在SQL

我有購買數據,如:

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

你期望結果是什麼? – Magnus 2012-01-16 23:43:56

+0

我想要結果:12:00 - 13:00 – asik 2012-01-16 23:45:15

+0

「買家最多的時間段」的標準是什麼?你爲什麼要12:00-13:00而不是13:00或10:00-13:00? – 2012-01-16 23:59:22

回答

1

您錯誤地建模了購買數據,部分原因是因爲您試圖存儲計算值(10:00,12:00,13:00)而不是依賴原始數據(日期時間)。

設計數據模型

這裏是爲您解決當前問題的一個方法時,請考慮您的報告要求

你可以有一個基地採購表順序Purchase_No,日期時間字段和獨特的PRODUCT_ID (您可能還需要例如數量字段)

當進行購買,這是填充了一個新的紀錄

0123表

爲了您的「每小時採購報告」您可以使用此查詢

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時

我不確定如何在您選擇的DBMS上實現HourOf和DayOf,這不應該太難以弄清楚。