2010-04-29 9 views
2

J'ai une base de données Oracle 10g avec une table avec une structure et un contenu très similaire à ce qui suit:requête SQL pour le dernier enregistrement pour chaque jour

CREATE TABLE MyTable 
(
    id   INTEGER PRIMARY KEY, 
    otherData VARCHAR2(100), 
    submitted DATE 
); 

INSERT INTO MyTable VALUES (1, 'a', TO_DATE('28/04/2010 05:13', ''DD/MM/YYYY HH24:MI)); 
INSERT INTO MyTable VALUES (2, 'b', TO_DATE('28/04/2010 03:48', ''DD/MM/YYYY HH24:MI)); 
INSERT INTO MyTable VALUES (3, 'c', TO_DATE('29/04/2010 05:13', ''DD/MM/YYYY HH24:MI)); 
INSERT INTO MyTable VALUES (4, 'd', TO_DATE('29/04/2010 17:16', ''DD/MM/YYYY HH24:MI)); 
INSERT INTO MyTable VALUES (5, 'e', TO_DATE('29/04/2010 08:49', ''DD/MM/YYYY HH24:MI)); 

Ce que je dois faire est interroger la base de données pour le dernier enregistrement soumis chaque jour. Par exemple, avec les données ci-dessus, je m'attendrais à ce que les enregistrements portant les numéros d'identification 1 et 4 soient retournés, car ils sont les derniers pour les 28 avril et 29 avril respectivement.

Malheureusement, j'ai peu d'expertise en ce qui concerne SQL. Quelqu'un pourrait-il donner un aperçu de la façon d'y parvenir?

Merci d'avance!

Répondre

5

J'utiliser une expression de table commune (aka CTE) comme ceci:

With RankedItems As 
    (
    Select Id, otherdata, submitted 
     , ROW_NUMBER() OVER(PARTITION BY TO_CHAR(submitted, 'YYYY-MM-DD') ORDER BY submitted DESC) ItemRank 
    From MyTable 
    ) 
Select 
From RankedItems 
Where ItemRank = 1 
+0

Excellent! Juste ce dont j'avais besoin. Merci beaucoup! – Mac

0

Je pense qu'il est aussi simple que:

SELECT * from MyTable ORDER BY submitted DESC LIMIT 1

Bien qu'il pourrait être intéressant d'étudier s'il y a une colonne/où les paramètres qui pourraient faire fonctionner la requête plus rapidement, en particulier si vous avez un analyseur de plan de requête à portée de main.

+0

* chaque jour * –

+0

Merci Weston, mais comme Jeffrey l'a souligné, cela ne répond pas entièrement à mes exigences. On dirait que Thomas a la bonne idée. – Mac

Questions connexes