0
votes

Filtrer si seulement les dernières dates montrent à chaque identifiant unique

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


1 commentaires

Avez-vous essayé d'utiliser un groupe par l'ID et de montrer la dernière date


3 Réponses :


1
votes

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


0 commentaires

0
votes

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


0 commentaires

0
votes

Si vous voulez tous les équipements, cela devrait être la première table de la chaîne de 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>

avec cela à l'écart, je recommanderais 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


0 commentaires