Il y a plusieurs équipements.Id avec le même ID, mais différent conditionné_dates, je souhaite seulement montrer les dates de condition les plus récentes de chaque équipement unique.
Equipment ID | Condition_Date 3345.02 | 2013-08-29 3346 | 2019-07-05
3 Réponses :
Que diriez-vous des éléments suivants, agrégés en utilisant Max sur le champ de date et groupe par ID:
SELECT equipment.ID AS EquipmentID, MAX(CONDITION_DATE), FROM CONDITION LEFT JOIN EQUIPMENT ON condition.GUID_EQUIPMENT = EQUIPMENT.GUID LEFT JOIN Condition_type ON Condition.GUID_CONDITION_TYPE = condition_type.guid WHERE IS_DEACTIVATED = '0' AND equipment.HAS_CONDITION_CONTROL = '1' AND Condition_type.DESCRIPTION IS NOT NULL GROUP BY equipment.ID
Row_Number () code> est votre ami pour cette application sur SQL Server.
SELECT * FROM (
Select equipment.ID as EquipmentID,
equipment.DESCRIPTION,
CONDITION_DATE,
CONDITION_TYPE.DESCRIPTION,
ROW_NUMBER() OVER (Partition by equipment.ID ORDER BY CONDITION_DATE DESC) AS rownum
from CONDITION
LEFT JOIN EQUIPMENT ON condition.GUID_EQUIPMENT = EQUIPMENT.GUID
LEFT JOIN Condition_type ON Condition.GUID_CONDITION_TYPE = condition_type.guid
WHERE IS_DEACTIVATED = '0'
AND equipment.HAS_CONDITION_CONTROL = '1'
AND Condition_type.DESCRIPTION is not null ) WHERE rownum = 1
Si vous voulez tous les équipements, cela devrait être la première table de la chaîne de avec cela à l'écart, je recommanderais rejoindre code> s. Cependant, vous vérifiez une correspondance sur le type de condition, donc le
Rejoindre gauche code> S ne sont même pas appropriés. P>
Row_Number () code> dans une sous-requête sur les conditions
/ Code> Tableau: P>
select e.ID as EquipmentID, e.DESCRIPTION,
c.CONDITION_DATE,
ct.DESCRIPTION
from equipement e join
(select c.*,
row_number() over (partition by guid_equipment order by c.condition_date desc) as seqnum
from condition c
) c
on c.GUID_EQUIPMENT = e.GUID and
seqnum = 1 join
condition_type ct
on c.GUID_CONDITION_TYPE = ct.guid
where e.IS_DEACTIVATED = 0 and -- looks like a number, so no single quotes
e.HAS_CONDITION_CONTROL = 1 and -- looks like a number, so no single quotes
ct.DESCRIPTION is not null
Avez-vous essayé d'utiliser un groupe par l'ID et de montrer la dernière date