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