2

我有一个 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 而言,我几乎没有什么专业知识。任何人都可以提供一些关于如何实现这一目标的见解吗?

提前致谢!

4

2 回答 2

6

我会像这样使用公用表表达式(又名 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
于 2010-04-29T03:13:08.840 回答
0

我认为这很简单:

SELECT * from MyTable ORDER BY submitted DESC LIMIT 1

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

于 2010-04-29T03:30:58.880 回答