【问题标题】:SQL get Monthly, and weekly dataSQL 获取月度和周度数据
【发布时间】:2012-12-31 06:26:09
【问题描述】:

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

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

【问题讨论】:

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


【解决方案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

祝你好运。

【讨论】:

  • 查看编辑——还添加了 SQL Fiddle(站点在一分钟前关闭,无法测试)。祝你好运。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    相关资源
    最近更新 更多