Oracle SQL技术问询:如何对比security_privileges表中两组版本数据的行数
解决方法:对比两组数据的行数
让我来帮你搞定这个问题!你的核心需求是对比security_privileges表中两组数据的行数:
- 第一组:表中最新version_number对应的所有记录数(你提到是8行)
- 第二组:last_update早于2020年3月1日的所有记录数(你提到是6行)
你之前尝试的自连接SQL逻辑偏了——它是在关联version_number相差2的记录,和你的需求不匹配,所以没法得到正确结果。下面是两种正确的实现方式:
方式1:分开查询两个数值
查询最新version_number的行数
SELECT COUNT(*) AS latest_version_rows FROM security_privileges WHERE version_number = (SELECT MAX(version_number) FROM security_privileges);
这条语句先通过子查询拿到最大的version_number,再统计该版本下的所有记录数,会返回你需要的8。
查询last_update早于2020-03-01的行数
SELECT COUNT(*) AS old_update_rows FROM security_privileges WHERE last_update < '2020-03-01';
这条直接筛选出更新时间早于2020年3月1日的记录并统计数量,返回6。
方式2:合并成一个查询返回结果
如果希望在一次查询中得到两组数据的对比结果,可以用UNION ALL合并两个统计:
SELECT '最新version_number行数' AS 统计类别, COUNT(*) AS 行数 FROM security_privileges WHERE version_number = (SELECT MAX(version_number) FROM security_privileges) UNION ALL SELECT 'last_update早于2020-03-01的行数' AS 统计类别, COUNT(*) AS 行数 FROM security_privileges WHERE last_update < '2020-03-01';
执行后会得到两行结果,清晰展示两组数据的对比。
内容的提问来源于stack exchange,提问作者Skywalker
相关产品推荐
相关产品推荐

