当更新日期相同时,选择查询以获取最后一个用户更新的所有最后一行
Posted
技术标签:
【中文标题】当更新日期相同时,选择查询以获取最后一个用户更新的所有最后一行【英文标题】:SELECT query to fetch all last rows updated by last user when updated date is same 【发布时间】:2016-10-08 07:17:04 【问题描述】:我正在使用 Oracle 11g 数据库。 假设我有一个包含四列的 SQL 表“评论”。当某些用户 cmet 时,对于该评论的每一行,都会将一行插入到表中。
lineNo | Comment | updatedDate | UpdateBy
-----------------------------------------------------------
1 | Comment line 1 | 23-May-16 | Abhi
2 | Comment line 2 | 23-May-16 | Abhi
3 | Comment line 3 | 23-May-16 | Rohit
4 | Comment line 4 | 23-May-16 | Malay
5 | Comment line 5 | 23-May-16 | Malay
6 | Comment line 6 | 23-May-16 | Abhi
7 | Comment line 7 | 23-May-16 | Abhi
8 | Comment line 8 | 23-May-16 | Abhi
9 | Comment line 4 | 23-May-16 | Abhi
我想编写 SELECT 查询来获取最后一个用户更新的所有最后一行。在上述情况下,应获取 LineNo 6、7、8 和 9。更新日期相同。 我对数据库只有只读访问权限,不能将任何新列添加到组更新中。
有什么方法可以获取这些行吗?
【问题讨论】:
为什么1,2
没有被选中?他们也在同一日期由Abhi
更新。
因为我只想要最后一个用户更新的最后一行。
【参考方案1】:
这个查询将给出最后一个评论者所做的最后一个 cmets,在你的情况下是 6/7/8/9
SELECT *
FROM "Comments"
WHERE "lineNo">
( SELECT max("line No")
FROM "Comments"
WHERE (UpdateBy,updatedDate)<>
( SELECT "UpdateBy","updatedDate"
FROM "Comments"
WHERE "lineNo"=
(SELECT max("lineNo")
FROM "Comments") ))
修改了查询,因此如果最后一个评论者在 2 个不同的天(或更多天)发表评论,它将考虑最后一个评论天。
SqlFiddle 这里:http://www.sqlfiddle.com/#!9/91176e/1(mysql 兼容性,因为 Oracle fiddle 暂时有问题)
【讨论】:
【参考方案2】:我想这就是你想要的。
SELECT Comments.*
FROM (SELECT MAX(lineNo) AS maxLineNo, Comment FROM Comments GROUP BY Comment) as X
INNER JOIN Comments ON (Comments.lineNo = X.maxLineNo AND Comments.Comment = X.Comment)
【讨论】:
以上是关于当更新日期相同时,选择查询以获取最后一个用户更新的所有最后一行的主要内容,如果未能解决你的问题,请参考以下文章