【发布时间】:2016-08-02 22:15:23
【问题描述】:
我正在尝试获取 7 天内的项目计数,同时仍然能够报告所述 7 天期间的第一个日期。到目前为止我最接近的是
WITH w (w, n)
AS
(
SELECT MIN(CAST(CreatedDate AS DATE))
OVER(
PARTITION BY DATEPART(WEEK, CAST(CreatedDate AS DATE))
ORDER BY DATEPART(WEEK, CAST(CreatedDate AS DATE))
)
,COUNT(*)
FROM dbo.Tbl
WHERE
CreatedDate >= CAST(DATEADD(MONTH,-6,GETDATE()) AS DATE)
GROUP BY CAST(CreatedDate AS DATE)
)
SELECT w.w AS [Week of], SUM(w.n) AS [Items]
FROM w
GROUP BY w.w
ORDER BY 1 DESC
但不幸的是,这不适用于一年中的第一周或最后一周,如果日期范围超过一年,也将无法使用。
有没有办法按 7 天的时间段进行分组,同时仍然能够获得该时间段内的第一个日期?
【问题讨论】:
-
不使用 DATEPART,而是使用从开始日期算起的几周的 DATEDIFF。例如
PARTITION BY DATEDIFF(WEEK, myStartDate, CreatedDate)...等 -
@ZLK 这仅在服务器的
@@DATEFIRST值对应于分析所需的 7 天期间的开始时才有效。 -
@iamdave 确实如此。它应该是 datediff(day...)/7
标签: sql-server tsql