【发布时间】:2020-12-02 07:56:08
【问题描述】:
我有下表:
+-----------+----------+-------------+----------------+---------------+
| FirstName | LastName | SessionDate | SessionTitle | TotalDistance |
+-----------+----------+-------------+----------------+---------------+
| Player | Striker | 05.08.2020 | Entire Session | 10.0 |
| Player | Striker | 05.08.2020 | 1v1 | 5.0 |
| Player | Striker | 06.08.2020 | Entire Session | 12.0 |
| Coach | Defender | 06.08.2020 | Entire Session | 7.0 |
+-----------+----------+-------------+----------------+---------------+
我需要做的是为每个玩家单独计算 totalDistance 的平均值。平均值应仅使用值计算,其中 SessionTitle 为“EntireSession”,并且仅适用于每行的最后 50 天。所以预期的结果应该是这样的:
+-----------+----------+-------------+----------------+---------------+---------+
| FirstName | LastName | SessionDate | SessionTitle | TotalDistance | average |
+-----------+----------+-------------+----------------+---------------+---------+
| Player | Striker | 05.08.2020 | Entire Session | 10.0 | 10.0 |
| Player | Striker | 05.08.2020 | 1v1 | 5.0 | 10.0 |
| Player | Striker | 06.08.2020 | Entire Session | 12.0 | 11.0 |
| Coach | Defender | 06.08.2020 | Entire Session | 7.0 | 7.0 |
+-----------+----------+-------------+----------------+---------------+---------+
我尝试过这样的事情,但是当添加更多行时它非常慢:
SELECT t1.FirstName,
t1.LastName,
t1.SessionDate,
t1.SessionTitle,
t1.TotalDistance,
(SELECT (AVG(t2.TotalDistance) FROM myTable t2 WHERE t1.FirstName = t2.FirstName AND t1.LastName = t2.LastName AND t2.SessionTitle = 'EntireSession' AND t2.SessionDate <= DATEADD(DAY,50,t1.SessionDate)) as average
FROM myTable t1
它在 Azure SQL-Server 上运行 在 select 语句中如何以最快的方式完成这项工作?
提前致谢!
【问题讨论】:
-
请展示你的尝试
标签: sql sql-server average