SQL查询每天的最新记录

时间:2010-04-29 02:56:41

标签: sql oracle10g greatest-n-per-group

我有一个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));

我需要做的是在数据库中查询每个特定日期提交的最新记录。例如,根据上述数据,我希望返回ID号为1和4的记录,因为这些记录分别是4月28日和4月29日的最新记录。

不幸的是,就SQL而言,我几乎没有什么专业知识。任何人都可以提供一些有关如何实现这一目标的见解吗?

提前致谢!

2 个答案:

答案 0 :(得分:5)

我会像这样使用公用表表达式(又称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

答案 1 :(得分:0)

我认为这很简单:

SELECT * from MyTable ORDER BY submitted DESC LIMIT 1

虽然可能值得探讨是否有一些列/ where参数可以使查询运行得更快,特别是如果您有一个方便的查询计划分析器。