SQL 服务器组结果进入相对于日期的期间

SQL Server Group Results into Period Relative to Date

我希望将查询的平均分数分组到日期的每一天。我知道您可以通过以下方式获取星期几等日期的一部分:

'Week ' + CAST(DATEPART(wk, s.date_taken) AS (varchar(2)) Week

但这不是我想要的。我在连接期间过滤我的结果,以获取特定日期之前的四个星期和之后的四个星期,如下所示:

INNER JOIN
    swa_speeding AS s
    ON i.policy_id = s.policy_id
    AND s.date_taken BETWEEN DATEADD(WEEK,-4,i.note_date) AND DATEADD(WEEK,4,i.note_date)

问题是每个记录上的 table swa_speedingi.note_date 更改中加入了大量数据。

实际上,我要寻求帮助的是将所有结果分组到平均值相对于 i.note_date 的那一天,其中 i.note_date 是 [=33] 的中点=] 结果应如下所示:

到目前为止,这是我的查询:

;SELECT
    datepart(day, s.date_taken) [Day],
    AVG(s.dlyspeed)

FROM
    swa_intervention AS i

INNER JOIN
    swa_speeding AS s
    ON i.policy_id = s.policy_id
    AND s.date_taken BETWEEN DATEADD(WEEK,-4,i.note_date) AND DATEADD(WEEK,4,i.note_date)

INNER JOIN
    swa_policy AS p
    ON i.policy_id = p.id

WHERE
    i.id = 431

GROUP BY
    datepart(day, s.date_taken)

希望这对我想要实现的目标有意义吗?

添加一个新字段作为分组依据,如下所示。

SELECT
    [GroupName],
    AVG(s.dlyspeed)

FROM
    swa_intervention AS i

INNER JOIN
    swa_speeding AS s
    ON i.policy_id = s.policy_id
    AND s.date_taken BETWEEN DATEADD(WEEK,-4,i.note_date) AND DATEADD(WEEK,4,i.note_date)

INNER JOIN
    swa_policy AS p
    ON i.policy_id = p.id

CROSS APPLY (SELECT CASE WHEN s.date_taken > i.note_date THEN 'After' 
                    WHEN s.date_taken = i.note_date THEN 'On'
                    WHEN s.date_taken < i.note_date THEN 'Before'
            END [GroupName]
) a

WHERE               
    i.id = 431

GROUP BY
    [GroupName]