SQL-запрос для последней записи за каждый день - PullRequest
2 голосов
/ 29 апреля 2010

У меня есть база данных Oracle 10g с таблицей, структура и содержание которой очень похожи на следующее:

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));

Что мне нужно сделать, так это запросить в базе данных последние записи, представленные в каждый день. Например, с указанными выше данными я ожидаю, что будут возвращены записи с идентификационными номерами 1 и 4, так как они являются самыми последними для 28 апреля и 29 апреля соответственно.

К сожалению, у меня мало опыта в том, что касается SQL. Может ли кто-нибудь дать представление о том, как этого добиться?

Заранее спасибо!

Ответы [ 2 ]

5 голосов
/ 29 апреля 2010

Я бы использовал общее табличное выражение (он же CTE) примерно так:

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 голосов
/ 29 апреля 2010

Я думаю, что это так же просто, как:

SELECT * from MyTable ORDER BY submitted DESC LIMIT 1

Хотя, возможно, стоит изучить, есть ли какие-то столбцы / параметры, которые могут ускорить выполнение запроса, особенно если у вас есть удобный анализатор плана запросов.

...