SQL get Monthly, and weekly data

Я пишу запрос, чтобы указать количество проданных товаров на этой неделе, в этом месяце и в этом году (3 отдельных столбца) по неделям, месяцам и годам, что означает сегодня, например, в нем будут показаны продукты, проданные с понедельника. начиная с первого числа месяца и начиная с первого года, и это будет продолжаться с каждой следующей неделей, месяцем и годом с течением времени, также должны быть еще 3 столбца с той же логикой для прошлого года. Что мне нужно, это помочь получить запрос даты, используя DATEADD или DATEDIFF (пример (DATEADD(минута, -15, GETDATE())).

Большое спасибо, а также я использую SQL Server 2008

2 ответа

Решение

Вот некоторый непроверенный код, который, вероятно, можно было бы оптимизировать, но он должен направить вас в правильном направлении. Это использует PIVOT операция для преобразования ваших строк в столбцы.

SELECT WeekCount, MonthCount, YearCount
FROM
(
SELECT ProductId, 
    CASE
        WHEN ProductSoldDate >= DATEADD(dd, 1 - DATEPART(dw, GETDATE()), GETDATE())
        THEN 'WeekCount'
        WHEN ProductSoldDate >= DATEADD(mm, DATEDIFF(mm,0,GETDATE()), 0)
        THEN 'MonthCount'
        WHEN ProductSoldDate >= DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0)
        THEN 'YearCount'
    END as lbl
FROM Products 
) ProductSales
PIVOT
(
COUNT(ProductId)
FOR lbl IN ([WeekCount], [MonthCount], [YearCount])
) t

Вот SQL Fiddle.

Удачи.

Использование функции DATEADD

В некоторых случаях может потребоваться добавить интервал времени к значению DATETIME или SMALLDATETIME или вычесть интервал времени. Например, вам может понадобиться добавить или вычесть месяц из определенной даты. Вы можете использовать функцию DATEADD для выполнения этого расчета. Функция принимает следующий синтаксис:

DATEADD (дата / время_часть, номер, дата)

Пример:

SELECT OrderDate, DATEADD(mm, 3, OrderDate) AS NewDate
FROM Sales.Orders
WHERE OrderID = 1001

Использование функции DATEDIFF

Функция DATEDIFF вычисляет временной интервал между двумя датами и возвращает целое число, представляющее интервал. Функция принимает следующий синтаксис:

DATEDIFF (date / time_part, start_date, end_date)

Пример:

SELECT OrderDate, DelivDate,
    DATEDIFF(hh, OrderDate, DelivDate) AS HoursDiff
    FROM Sales.Orders
    WHERE OrderID = 1002
Другие вопросы по тегам