如何通过参数 (SQL) 查找最后一项?
How to find last item by parameter (SQL)?
我有一个查询要在历史记录中搜索一些项目。例如:
SELECT * FROM HISTORY WHERE DOCUMENT IN ('DOC1','DOC2','DOC3') ORDER BY DOC ASC, CREATION_DATE DESC;
这个查询 return 我是这样的列表:
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
但我只想要文档的最新项目。例如:
ID | DOC | CREATIONDATE
6 | DOC1 | 12/12/2022
5 | DOC2 | 12/12/2022
4 | DOC3 | 12/12/2022
我不想要旧的物品。只是文档插入的最后一项。有人可以帮助我吗?
一个选项是按 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
我有一个查询要在历史记录中搜索一些项目。例如:
SELECT * FROM HISTORY WHERE DOCUMENT IN ('DOC1','DOC2','DOC3') ORDER BY DOC ASC, CREATION_DATE DESC;
这个查询 return 我是这样的列表:
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
但我只想要文档的最新项目。例如:
ID | DOC | CREATIONDATE
6 | DOC1 | 12/12/2022
5 | DOC2 | 12/12/2022
4 | DOC3 | 12/12/2022
我不想要旧的物品。只是文档插入的最后一项。有人可以帮助我吗?
一个选项是按 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