1

我正在写一个查询,以提供本周、本月和今年(3 个单独的列)在一周至今、本月至今和年初至今的规模上售出的产品数量,例如今天它将显示自星期一以来售出的产品,从每月的第一天和第一年开始,随着时间的推移,这将在接下来的每个星期、月份和年份继续,去年还有 3 个具有相同逻辑的其他列。我需要的是帮助使用 DATEADD 或 DATEDIFF 获取日期查询(例如(DATEADD(分钟,-15,GETDATE()))。

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

4

2 回答 2

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 小提琴

祝你好运。

于 2013-01-16T20:20:49.020 回答
0

使用 DATEADD 函数

在某些情况下,您可能希望将时间间隔添加到 DATETIME 或 SMALLDATETIME 值或减去时间间隔。例如,您可能需要从特定日期添加或减去一个月。您可以使用 DATEADD 函数来执行此计算。该函数采用以下语法:

DATEADD(日期/时间部分,数字,日期)

例子:

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

使用 DATEDIFF 函数

DATEDIFF 函数计算两个日期之间的时间间隔,并返回一个表示该间隔的整数。该函数采用以下语法:

DATEDIFF(日期/时间部分,开始日期,结束日期)

例子:

SELECT OrderDate, DelivDate,
    DATEDIFF(hh, OrderDate, DelivDate) AS HoursDiff
    FROM Sales.Orders
    WHERE OrderID = 1002
于 2013-01-16T20:12:23.163 回答