在我的表中,我有这三个表:
团队:
Id GUID UNIQUE PRIMARY
Name NVARCHAR
参与者:
Id GUID UNIQUE PRIMARY
FirstName NVARCHAR
[....]
TeamId GUID
参与者资料:
Id GUID UNIQUE PRIMARY
Weight FLOAT
Date DATETIME
ParticipantId GUID
TeamId GUID
我需要的是一个 SQL 查询,它为我提供 Teams 中的所有列,并且:
团队中参与者的 ParticipantData 中第一个(按日期排序)条目的总和 (TeamId)
团队参与者的 ParticipantData 中最后(按日期排序)条目的总和 (TeamId)
解释:
我有很多参与者(团队成员)以某个时间间隔(体重 + 日期)报告他们的体重。我想要完成的是计算所有团队成员的体重减轻。
在 2019-01-03 参与者 1 报告权重 78
在 2019-01-06 参与者 1 报告权重 75
在 2019-01-04 参与者 2 报告权重 86
在 2019-01-07 参与者 2 报告权重 83
我需要查询来获得 SumOfFirstWeights (78 + 86) = 164
我需要查询来获得 SumOfLastWeights (75 + 83) = 158
这让我的体重减轻了 6。
我尝试了很多组合:
Select *,
(SELECT TOP (1) Sum(Weight)
FROM ParticipantData WHERE (TeamId = Teams.Id)
GROUP BY ParticipantId
)
ORDER BY Date As SumOfFirstWeights
From Teams
您的问题是每组某种最大/最低,而且,您需要这些值的总和。
select t.id, t.name, sum(t1.weight), sum(t2.weight)
from teams t
left join
(
select pd.teamid, pd.participantid, pd.weight
from ParticipantData pd
join
(
select teamid, participantid, min(date) min_date
from ParticipantData
group by teamid, participantid
) t on pd.teamid = t.teamid and
pd.participantid = t.participantid and
pd.date = t.min_date
) t1 on t.id = t1.teamid
left join
(
select pd.teamid, pd.participantid, pd.weight
from ParticipantData pd
join
(
select teamid, participantid, max(date) max_date
from ParticipantData
group by teamid, participantid
) t on pd.teamid = t.teamid and
pd.participantid = t.participantid and
pd.date = t.max_date
) t2 on t1.teamid = t2.teamid and
t1.participantid = t2.participantid
group by t.id, t.name
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句