我希望将查询中的平均分数分组到日期的每一天。我知道你可以通过以下方式获得一周中的某一天等等。
'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)
问题在于,每条记录上的表格swa_speeding
和i.note_date
都会加入大量数据。
实际上,我要求帮助的是将所有结果分组到平均来自相对于i.note_date
并且i.note_date
为结果中点的平均值的那一天。结果应该是看起来像:
到目前为止我的查询:
;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)
希望这对我想要实现的目标有意义吗?
答案 0 :(得分:1)
添加新字段到组,如下所示。
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]