SQL获取每月和每周数据

时间:2013-01-16 20:03:32

标签: sql sql-server-2008 datediff dateadd sql-date-functions

我正在写一个查询,给我本周迄今为止销售的产品数量,本月和今年(3个单独的专栏),一个星期至今,月初至今和年初至今的比例意义,例如它将显示产品从星期一开始销售,从本月的第一天到今年的第一年开始,随着时间的推移,随后每周,每月和每年继续销售,去年还有其他3个具有相同逻辑的列。我需要的是帮助使用DATEADD或DATEDIFF获取日期查询(例如(DATEADD(分钟,-15,GETDATE()))。

非常感谢,我也在使用SQL Server 2008

2 个答案:

答案 0 :(得分:1)

这是一些未经测试的代码,可能会被优化,但应该让你朝着正确的方向前进。这使用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

祝你好运。

答案 1 :(得分:0)

使用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