我有一个基本的表格,每天都有每日日期和数值。但是,在必要的过滤器之后,缺少某些日期。我希望这个每日数据(虽然缺少一周中的随机天数)每周分组,本周开始是星期日,本周结束时间是星期六。例如,以其中一周的数据为例:
|---------------------|------------------|
| DATE | Number |
|---------------------|------------------|
| 01/23/18 | 2 |
|---------------------|------------------|
| 01/25/18 | 5 |
|---------------------|------------------|
| 01/27/18 | 3 |
|---------------------|------------------|
| 01/29/18 | 1 |
|---------------------|------------------|
| 01/31/18 | 4 |
|---------------------|------------------|
| 02/02/18 | 8 |
|---------------------|------------------|
这就是我希望在小组之后显示的数据:
|---------------------|------------------|
| Week_Start | SUM |
|---------------------|------------------|
| 01/21/18 | 10 |
|---------------------|------------------|
| 01/28/18 | 13 |
|---------------------|------------------|
这是我到目前为止所做的:
SET DATEFIRST 7
SELECT DATEADD(WEEK, DATEPART(WEEK,a.DATE_NOTIME)-1, DATEADD(YEAR, DATEDIFF(YEAR, 0, a.DATE_NOTIME), 0)) AS 'Week_Start'
,SUM(a.Daily_Count) AS 'Total_Weekly_Sum'
FROM
(SELECT DATEADD(dd, DATEDIFF(dd, 0, t.DATE), 0) AS 'DATE_NOTIME'
,COUNT(t.TicketID) AS 'Daily_Count'
FROM daily_Table t
GROUP BY DATEADD(dd, DATEDIFF(dd, 0, t.DATE), 0)
) AS a
GROUP BY DATEADD(WEEK, DATEPART(WEEK,a.DATE_NOTIME)-1, DATEADD(YEAR,DATEDIFF(YEAR, 0, a.DATE_NOTIME), 0))
ORDER BY DATEADD(WEEK, DATEPART(WEEK,a.DATE_NOTIME)-1, DATEADD(YEAR, DATEDIFF(YEAR, 0, a.DATE_NOTIME), 0))
SET DATEFIRST 6
我对上述代码的问题在于,2017年全年与“WeeK_Start”的正确总和和日期完全分组。但是一旦到达2018年的数据,分组就会混乱,“Week_Start”成为星期一。所以列表如下:
|---------------------|------------------|
| Week_Start | Total_Weekly_Sum |
|---------------------|------------------|
| 12/17/17 | 2 |
|---------------------|------------------|
| 12/24/18 | 5 |
|---------------------|------------------|
| 12/31/18 | 3 |<< Sunday
|---------------------|------------------|
| 01/01/18 | 1 |<< Monday
|---------------------|------------------|
| 01/08/18 | 4 |<< Monday
|---------------------|------------------|
| 01/15/18 | 8 |
|---------------------|------------------|
如何解决此问题?
答案 0 :(得分:0)
我发现了这个问题。我的发言是发现本周的第一周。我取代了这个:
DATEADD(WEEK, DATEPART(WEEK,a.DATE_NOTIME)-1, DATEADD(YEAR, DATEDIFF(YEAR, 0, a.DATE_NOTIME), 0))
使用:
DATEADD(DAY,-1,DATEADD(WEEK,DATEDIFF(WEEK,0,a.DATE_NOTIME),0))
现在它适用于任何一年!希望它可以帮助有需要的人。