如何通过参数(SQL)查找最后一项? [复制]
Posted
技术标签:
【中文标题】如何通过参数(SQL)查找最后一项? [复制]【英文标题】:How to find last item by parameter (SQL)? [duplicate] 【发布时间】:2021-06-13 17:22:13 【问题描述】:我有一个查询要搜索历史记录中的一些项目。例如:
SELECT * FROM HISTORY WHERE DOCUMENT IN ('DOC1','DOC2','DOC3') ORDER BY DOC ASC, CREATION_DATE DESC;
这个查询返回给我一个这样的列表:
ID | DOC | CREATIONDATE
6 | DOC1 | 12/12/2022
3 | DOC1 | 11/11/2022
5 | DOC2 | 12/12/2022
2 | DOC2 | 11/11/2022
4 | DOC3 | 12/12/2022
1 | DOC3 | 11/11/2022
但我只想要 doc 的最新项目。例如:
ID | DOC | CREATIONDATE
6 | DOC1 | 12/12/2022
5 | DOC2 | 12/12/2022
4 | DOC3 | 12/12/2022
我不想要旧的。只是文档插入的最后一项。有人可以帮助我吗?
【问题讨论】:
为什么不从允许更精确的日期格式开始呢?您无法区分哪个是最后创建的文档。然后您就可以在查询末尾添加“LIMIT 1” @jozinho22 Oracle 不支持LIMIT
关键字(相反,可以使用FETCH FIRST n ROWS ONLY
,或者根据版本,在订购后过滤ROWNUM
伪列)。但是,这些都不会限制每组中的行;他们会限制总行数。
【参考方案1】:
一种选择是按creation_date
降序排列它们,然后选择第一个。
SELECT id, doc, creation_date
FROM (SELECT id,
doc,
creation_date,
RANK () OVER (PARTITION BY doc ORDER BY creation_date DESC) rnk
FROM history
WHERE document IN ('DOC1', 'DOC2', 'DOC3'))
WHERE rnk = 1
ORDER BY doc
【讨论】:
以上是关于如何通过参数(SQL)查找最后一项? [复制]的主要内容,如果未能解决你的问题,请参考以下文章