也许这可能是一个简单的问题,但是,我无法找到解决方案
我有这个预期的表:
假设这些数据和列:
PERSONA FECHA_PERF SECUENCIA2 NIVEL4_RIESGO
---------+---------+---------+---------+-------
24226517 12.06.2018 53. 00
24226517 12.06.2018 52. 04
24226517 12.06.2018 51. 04
24226517 12.06.2018 26. 04
24226517 12.06.2018 15. 04
24226517 12.06.2018 14. 04
24226517 12.06.2018 7. 04
24226517 08.05.2018 91. 04
24226517 08.05.2018 90. 04
24226517 08.05.2018 89. 03
24226517 08.05.2018 78. 04
24226517 08.05.2018 77. 04
24226517 08.05.2018 69. 04
24226517 08.05.2018 68. 04
24226517 08.05.2018 67. 04
24226517 08.05.2018 66. 04
24226517 08.05.2018 65. 01
24226517 08.05.2018 64. 04
24226517 08.05.2018 63. 04
24226517 08.05.2018 62. 04
24226517 08.05.2018 61. 04
24226517 08.05.2018 60. 04
24226517 08.05.2018 52. 04
24226517 08.05.2018 51. 04
FECHA_PERF 是日期字段,Secuencia2 是整数字段,Nivel4_riesgo 是 Char(2) 字段,persona 是 char (9) 字段
我需要为每个PERSONA字段获取已插入表中的最新 NIVEL4_RIESGO 值,我需要同时考虑FECHA_PERF和SECUENCIA2字段
该表还有许多其他字段,但为了结果,这些是需要的字段
查询的期望结果应该是:
--------------+---------
PERSONA NIVEL4_RIESGO
--------------+---------
24226517 00
对应于这条记录:
---------+---------+---------+---------+-------
PERSONA FECHA_PERF SECUENCIA2 NIVEL4_RIESGO
---------+---------+---------+---------+-------
24226517 12.06.2018 53. 00
您能否提供一种可能的方式来实现这一点?我有,不知何故,这是用子查询排序的,但我想知道是否有更好的方法来做到这一点,特别是在性能方面。我考虑过为每个子查询使用 DB2 临时表,但是在这家商店,嗯,他们对此有点深奥,如果我使用它们就不那么高兴了
SELECT A.PERSONA, A.NIVEL4_RIESGO
FROM DIGEIN.GIPERF_PERS_GPP AS A
INNER JOIN
( SELECT PERSONA
,MAX(CHAR(VARCHAR_FORMAT(B.FECHA_PERF,'YYYY-MM-DD'),10) ||
TRIM(TO_CHAR(B.SECUENCIA2,'00'))) AS VALORX
,MAX(FECHA_PERF)
,MAX(SECUENCIA2)
FROM DIGEIN.GIPERF_PERS_GPP AS B
WHERE PERSONA = '24226517'
AND B.NIVEL4_RIESGO <> ''
GROUP BY PERSONA
) AS C
ON A.PERSONA = C.PERSONA
AND CHAR(VARCHAR_FORMAT(A.FECHA_PERF,'YYYY-MM-DD'),10) ||
TRIM(TO_CHAR(A.SECUENCIA2,'00')) =
C.VALORX
这个查询结果是:
---------+---------+---
PERSONA NIVEL4_RIESGO
---------+---------+---
24226517 00
这是我需要的。