也许这是个简单的问题,但我想不出一个解决办法
我有一张可能的桌子:
假设这些数据和列:
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)字段,角色是char (9)字段。
我需要获得已插入到表中的每个个性化字段的最新值,我需要同时考虑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 这正是我所需要的。
发布于 2018-07-12 11:05:28
如果我理解正确,这通常是使用row_number()完成的。
select p.*
from (select p.*,
row_number() over (partition by persona
order by fecha_perf desc, secuencia2 desc
) as seqnum
from DIGEIN.GIPERF_PERS_GPP p
) p
where seqnum = 1;如果你只想要一个人的结果,你可以使用更简单的:
select p.*
from DIGEIN.GIPERF_PERS_GPP p
where persona = XXX
order by fecha_perf desc, secuencia2 desc
fetch first 1 row only;https://stackoverflow.com/questions/51300901
复制相似问题