0
votes

SQL retourne la date et l'heure les plus récentes

J'ai les données ci-dessous et j'ai besoin de voir la date la plus récente à laquelle l'action équivaut à "USED":

A   05/12/2019 07:56    USED
B   13/01/2020 14:50    USED

Pour ce qui précède, j'en aurais besoin pour retourner:

XXX

Pour chaque 'Cat', il peut y avoir des centaines d'entrées pour chaque jour et il doit regarder en arrière sur plusieurs années, ne renvoyant que l'entrée la plus récente. J'ai essayé la fonction MAX mais je ne pense pas que cela fonctionne à cause du format de la date.


1 commentaires

Veuillez marquer votre question avec la base de données que vous utilisez. Aussi, juste au cas où: quel est le type de données de la colonne stamp ?


4 Réponses :


0
votes

Une façon de le faire est de filtrer avec une sous-requête corrélée:

select t.*
from mytable t
left join mytable t1
    on  t1.cat = t.cat
    and t1.action = t.action
    and t1.stamp > t.stamp
where t.action = 'USED' and t1.cat is null

Une autre solution typique est le modèle anti- jointure gauche :

XXX

Les deux solutions supposent que stamp est stocké dans un type de données semblable à date . Si ce n'est pas le cas, vous avez besoin d'une étape supplémentaire pour convertir la chaîne en date.


0 commentaires

1
votes

Vous pouvez utiliser la sous-requête:

select t.*
from table t 
where t.action = 'used' and
      t.stamp = (select max(t2.stamp) from table t1 where t1.stamp = t.stamp)


0 commentaires

0
votes

On dirait que le tampon est stocké en tant que varchar au lieu de datetime. Essayez d'abord CAST .

SELECT cat, MAX(CAST stamp AS DateTime) as MxDate, 'used' as Action
FROM mytable
WHERE Action = 'used'
GROUP BY cat


0 commentaires

0
votes

Ce serait:

select t.cat, max(t.stamp)
from t
where t.action = 'used'
group by t.cat;

Notez que le filtrage est dans la sous-requête.

Ou, peut-être plus simplement comme:

select t.*
from t 
where t.stamp = (select min(t2.stamp)
                 from table t2
                 where t2.cat = t.cat and t2.action = 'used' 
                );


0 commentaires