0
votes

Rechercher le premier enregistrement de plusieurs valeurs dans une seule requête

Table strong>

SELECT *
FROM my_table
WHERE tracker_id = '15'
ORDER BY timestamp
LIMIT 1;


3 commentaires

Y a-t-il une clé primaire dans cette table?


@Andronicus Il n'y a pas de contrainte de clé primaire, mais horodatage sera unique


@saintlyzero vérifie ma requête, optimisée et fonctionne parfaitement ci-dessous.


6 Réponses :


1
votes

Vous pouvez utiliser first_value avec la requête imbriquée : xxx

Je suppose horodatage est unique, comme si vous l'avez dit dans le commentaire. Vous pouvez toujours remplacer la colonne de jonction avec une clé primaire, comme ID .


0 commentaires

1
votes

J'ai nommé votre colonne timestampl col1 car je ne recommande pas de nommer vos colonnes avec des mots-clés.

select * from mytable m
where m.col1 = (select min(col1)
              from mytable m1
              where m.tracker_id = m1.tracker_id
              group by tracker_id)
and m.tracker_id in (11,15,12);

Voici une petite démo


0 commentaires

2
votes

Dans Postgres, cela peut être fait en utilisant la clause DISTINCT ON () :

select distinct on (tracker_id) *
from the_table
where tracker_id in (11,12,15)
order by tracker_id, "timestamp" desc;

Exemple en ligne


0 commentaires

1
votes

Recherchez cette requête:

Vous pouvez simplement faire défendre la clause si vous souhaitez exécuter une requête pour sélectionner suivi_id xxx


5 commentaires

Avant de marquer, exécutez la requête et voyez le résultat, c'est une requête testée


C'est probablement à cause de ERROR: erreur de syntaxe à ou près de "[" (et Postgres a besoin du caractère de terminaison d'instruction ; à la fin d'une instruction, pas au début)


Hey @a_horse_with_no_name ce n'était qu'une faute d'orthographe, veuillez le relancer, et c'est pour tous les identifiants de tracker, si vous voulez sélectionner tracker_id, vous pouvez le passer dans la clause where.


Ceci est toujours invalide (SQL standard) et ne fonctionnera pas sur Postgres


Cela fonctionne parfaitement sur postgress également, le crochet carré donne l'erreur à postgres, ai-je supprimé le crochet carré



1
votes
select distinct on (tracker_id) *
from the_table
where tracker_id in ( select distinct tracker_id from the_table)
order by tracker_id, "timestamp" desc;

0 commentaires

1
votes

Si vous voulez la première ligne qui correspond à chacun de vos valeurs dans , vous pouvez utiliser une fonction de fenêtre: xxx

Cela retournera la première ligne qui correspond Pour chacun de vos valeurs , commandez par horodatage .


0 commentaires