интервал времени в sql - PullRequest
       3

интервал времени в sql

0 голосов
/ 17 января 2012

Как отобразить период времени наиболее широко используемого в 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 Ответ

1 голос
/ 17 января 2012

Вы неправильно смоделировали данные о покупке, отчасти потому, что пытались сохранить рассчитанное значение (10:00, 12:00, 13:00), а не полагаться на необработанные данные (дата / время).

Учитывайте ваши требования к отчетности при проектировании модели данных

Вот один из способов решения вашей текущей проблемы

У вас может быть базовая таблица покупок с последовательным приобретением_Нет, полем DateTimeи уникальный Product_Id (вам также может понадобиться поле «Количество», например)

Когда сделана покупка, эта таблица заполняется новой записью

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 в надежном ежечасном отчете.

Я не уверен, как реализовать HourOf и DayOf вваша СУБД по вашему выбору, это не должно быть слишком сложно выяснить.

...