代码之家  ›  专栏  ›  技术社区  ›  Mac Umer

SQL查询每天的最新记录

  •  2
  • Mac Umer  · 技术社区  · 14 年前

    我有一个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 回复  |  直到 14 年前
        1
  •  5
  •   Thomas    14 年前

    我将使用一个公共表表达式(也称为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
    
        2
  •  0
  •   Weston C    14 年前

    我觉得很简单:

    SELECT * from MyTable ORDER BY submitted DESC LIMIT 1

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