这是一个 sql dense_rank 函数问题。我一直在研究互联网试图找到答案。我已经尝试了几个版本,但没有任何工作。这是我遇到的问题:有人在 7/13 更改了程序。从 7 月 14 日起,该计划现在消除了薪水领域。我必须找到 = 0 的最新记录,然后找到 > 0 的第二个最新记录。这是我尝试过的代码之一:
(SELECT contract_nbr,
business_unit,
ymdeff,
ymdend,
ymdtrans,
void,
salary,
Dense_rank()
OVER (
partition BY contract_nbr
ORDER BY ymdend, salary DESC)
FROM (SELECT DISTINCT contract_nbr,
business_unit,
ymdeff,
ymdend,
ymdtrans,
void,
salary
FROM contract_span
WHERE business_unit = 'KA'
AND ymdtrans > 20130714
AND contract_nbr = 'XXXX'))
这些是结果。它们看起来不错,只是我只需要底部的 2 行。有没有办法只接收最后两行?YMDEND 并不总是 99991231,所以我不能使用该字段。
CONTRACT_NBR BUSINESS_UNIT YMDEFF YMDEND YMDTRANS 无效工资 XXXX KA 20130101 20130531 20130725 V 129300 XXXX KA 20130101 20130531 20130725 0 XXXX KA 20130601 99991231 20130725 V 129300 XXXX 卡 20130601 99991231 20130725 0