2 votes

Sélectionnez les lignes uniques de la clé étrangère et du dernier horodatage.

J'ai une base de données avec une table avec ces schémas :

CREATE TABLE register (
    register_id INTEGER NOT NULL, 
    mould_id VARCHAR, 
    timestamp INTEGER NOT NULL, 
    PRIMARY KEY (register_id), 
    FOREIGN KEY(mould_id) REFERENCES mould (mould_id)
)

L'horodatage est un entier incrémental, donc un horodatage plus grand signifie un temps plus récent.

Je veux obtenir le dernier registre (le plus récent/le plus grand timestamp) pour chaque mould_id. Est-il possible d'obtenir cela en utilisant une requête SQL ?

3voto

Jesús Muñoz Points 48

Vous pouvez regrouper par numéro de moule :

select *, max(timestamp) from register group by mould_id

1voto

Mr.Bakaop Points 11
SELECT * FROM register WHERE mould_id = :mould_id ORDER_BY timestamp ASC LIMIT 1

1voto

Kobi Points 2251

http://sqlfiddle.com/#!7/3ff366/6
Vous pouvez d'abord regrouper les données par numéro de moule et sélectionner le dernier horodatage (maximum).
Sélectionnez ensuite les données de la table de registre où le numéro de moule et l'horodatage correspondent.

SELECT *
  FROM register r
  JOIN ( SELECT mould_id
              , MAX(timestamp) timestamp
           FROM register
          GROUP BY mould_id ) d ON r.mould_id  = d.mould_id
                               AND r.timestamp = d.timestamp

0voto

baar Points 186

Je ne suis pas sûr que SQL Lite supporte cette syntaxe mais dans postgreSQL, vous le feriez :

SELECT DISTINCT ON (r.mould_id) * FROM register r ORDER BY r.mould_id, timestamp ASC

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X