2012-01-13 3 views
2

У меня есть база данных SQL Server 2008 со столбиком (datetime datatype), когда размещен заказ.SQL-запрос для часовых поясов

Я хотел бы запустить запрос, который даст разбивку общей суммы заказов в час на любую заданную дату или диапазон дат, но я не знаю, как лучше всего написать запрос.

ответ

3

Это должно быть что-то вдоль линий:

SELECT DATEPART(HOUR, OrderDate) AS [Hour], COUNT(*) AS [Count] 
FROM [Orders] 
WHERE OrderDate BETWEEN @StartDate AND @EndDate --or whatever criteria 
GROUP BY DATEPART(HOUR, OrderDate) 
+0

хорошая работа с заявлением WHERE. Я полностью его исключил. – DataGirl

0

Вы, вероятно, ищете что-то вроде:

;WITH OrdersPerHour AS 
(
    SELECT 
     CAST(OrderDate AS DATE) 'OrderDate', 
     DATEPART(HOUR, OrderDate) AS 'Hour', 
     SalesAmount 
    FROM 
     dbo.YourOrderTable 
) 
SELECT 
    OrderDate, Hour, 
    COUNT(*),   -- number of orders 
    SUM(SalesAmount) -- sum of the amounts for those orders 
FROM 
    OrdersPerHour 
WHERE 
    OrderDate = '20120113' -- or whatever you're looking for 
GROUP BY 
    OrderDate, Hour 

Не уверен, что если вы имеете в виду общую сумму суммы заказа - или количество заказов - когда вы говорите разбивку общего количества заказов в час - если вам нужен счет, просто используйте COUNT(*) вместо SUM(SalesAmount). Я положил в свой запрос.

0

Вы можете использовать DATEPART и GROUP BY, чтобы получить это:

SELECT DATEPART(Hour, DateField), COUNT(*) 
FROM Orders 
WHERE Date = @DateParam -- or your range check here 
GROUP BY DATEPART(Hour, Datefield) 
0

я считаю, что это будет так просто, как это:

SELECT 
     [Hour] = DATEPART(HOUR,DateTimeField) 
     ,Orders = COUNT(*) 
    FROM 
     tblORDERS 
    GROUP BY 
     DATEPART(HOUR,DateTimeField) 
Смежные вопросы