Sql 从中获取最新项目(即使为null)
我有三个不同的表,我试图根据下面不同的表值获得输出,但现在它返回表列的所有字段,而我只需要最新的一个。输出应如下所示:Sql 从中获取最新项目(即使为null),sql,database,oracle,Sql,Database,Oracle,我有三个不同的表,我试图根据下面不同的表值获得输出,但现在它返回表列的所有字段,而我只需要最新的一个。输出应如下所示: 期望输出: ╔════╦════════╦═══════╦════════════╦═════════╗ ║ 身份证件║ 价值║ 名称║ 总数║ 版本║ ╠════╬════════╬═══════╬════════════╬═════════╣ ║ 1.║ 你好║ 彼得║ 52║ 第二║ ║ 2.║ 你好║ 厕所║ 16║ 第三║ ║
期望输出:
╔════╦════════╦═══════╦════════════╦═════════╗
║ 身份证件║ 价值║ 名称║ 总数║ 版本║
╠════╬════════╬═══════╬════════════╬═════════╣
║ 1.║ 你好║ 彼得║ 52║ 第二║
║ 2.║ 你好║ 厕所║ 16║ 第三║
║ 3.║ 女贞║ 卢克║ 3.║ 第一║
╚════╩════════╩═══════╩════════════╩═════════╝
表格用户
╔════╦════════╦═══════╦══╗
║ 身份证件║ 价值║ 名称║ ║
╠════╬════════╬═══════╬══╣
║ 1.║ 你好║ 彼得║ ║
║ 2.║ 你好║ 厕所║ ║
║ 3.║ 女贞║ 卢克║ ║
║ 4.║ 耶║ 伊莱║ ║
╚════╩════════╩═══════╩══╝代码>
桌上道具
╔════╦════════╦═════════╦══╗
║ 身份证件║ 价值║ 数量║ ║
╠════╬════════╬═════════╬══╣
║ 1.║ 你好║ 40║ ║
║ 2.║ 你好║ 5.║ ║
║ 3.║ 女贞║ 3.║ ║
║ 4.║ 你好║ 2.║ ║
║ 5.║ 你好║ 9║ ║
║ 6.║ 你好║ 12║ ║
╚════╩════════╩═════════╩══╝
表列
╔════╦════════╦═════════╦════════════╗
║ 身份证件║ 价值║ 版本║ 日期║
╠════╬════════╬═════════╬════════════╣
║ 1.║ 你好║ 第一║ 06-20-2015 ║
║ 2.║ 你好║ 第一║ 04-24-2015 ║
║ 3.║ 女贞║ 第一║ 02-01-2015 ║
║ 4.║ 你好║ 第二║ 10-05-2015 ║
║ 5.║ 你好║ 第三║ 01-03-2016 ║
║ 6.║ 你好║ 第二║ 01-23-2016 ║
╚════╩════════╩═════════╩════════════╝
`首先,如果只需要一行,请不要按版本分组。使用聚合时,keep
是一种有用的方法:
SELECT u.id, u.value, u.name,
sum(p.amount),
max(r.version) keep (dense_rank first order by r.version) as version,
max(r.value) keep (dense_rank first order by r.version) as value
FROM users u join
props p
on u.value = p.value left join
ranks r
on u.value = r.value
GROUP BY u.id, u.values, u.title;
首先,如果只需要一行,不要按版本分组。使用聚合时,keep
是一种有用的方法:
SELECT u.id, u.value, u.name,
sum(p.amount),
max(r.version) keep (dense_rank first order by r.version) as version,
max(r.value) keep (dense_rank first order by r.version) as value
FROM users u join
props p
on u.value = p.value left join
ranks r
on u.value = r.value
GROUP BY u.id, u.values, u.title;
谢谢即使为空
,也会输出版本
?@Joseph。它应该根据
的顺序输出第一条记录中的版本。您可能需要先使用NULL
您希望将NULL
值放在第一位。谢谢!,即使为空
,也会输出版本
?@Joseph。它应该根据的顺序输出第一条记录中的版本。您可能需要先使用NULL
您希望将NULL
值放在第一位。