Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从中获取最新项目(即使为null)_Sql_Database_Oracle - Fatal编程技术网

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
值放在第一位。