我有一个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而言,我几乎没有什么专业知识。任何人都可以提供一些有关如何实现这一目标的见解吗?
提前致谢!
答案 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参数可以使查询运行得更快,特别是如果您有一个方便的查询计划分析器。