En mi mesa tengo estas tres mesas:
Equipos:
Id GUID UNIQUE PRIMARY
Name NVARCHAR
Participantes:
Id GUID UNIQUE PRIMARY
FirstName NVARCHAR
[....]
TeamId GUID
ParticipantData:
Id GUID UNIQUE PRIMARY
Weight FLOAT
Date DATETIME
ParticipantId GUID
TeamId GUID
Lo que necesito es una consulta SQL que me proporcione todas las columnas de Teams Y:
La suma de las primeras entradas (orden por fecha) en ParticipantData de los participantes en el equipo (TeamId)
La suma de las últimas entradas (ordenadas por fecha) en ParticipantData de los participantes en el equipo (TeamId)
Explicación:
Tengo muchos participantes (miembros del equipo) que informan su peso con algún intervalo (Peso + Fecha). Lo que intento lograr es calcular la pérdida de peso de todos los miembros del equipo.
En 2019-01-03, el participante 1 informa Peso 78
El 2019-01-06 El participante 1 informa Peso 75
En 2019-01-04 El participante 2 informa Ponderación 86
El 2019-01-07 El participante 2 informa Peso 83
Necesito la consulta para obtener SumOfFirstWeights (78 + 86) = 164
Necesito la consulta para obtener SumOfLastWeights (75 + 83) = 158
Lo que me da una pérdida de peso de 6.
He probado muchas combinaciones de:
Select *,
(SELECT TOP (1) Sum(Weight)
FROM ParticipantData WHERE (TeamId = Teams.Id)
GROUP BY ParticipantId
)
ORDER BY Date As SumOfFirstWeights
From Teams
Su problema es algún tipo de mayor / menor por grupo, además, desea una suma de estos valores.
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
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras