我有一个函数,它给我有序的行(函数已经按结果排序):
通过执行:select * from func1(ID)
示例A:
rownum date qty
1 1.1.10 -5
2 1.10.10 6
3 2.10.10 6
4 5.10.10 -2
5 6.10.10 -8
例B:
rownum date qty
1 1.1.10 -7
2 1.10.10 6
注意:rownum
是我在我的函数中手动计算的列。它的订单完全符合我的需求。因此可以基于此。
我想编写一个查询,该查询从从下到上(最高rownum
到最低rownum
)的行传递并返回date
的第一次遇到负面qty
例如A返回值为6.10.10
(rownum 5是负值为qty的第一行)
例如B 1.1.10
(rownum 2是负数值为qty的第一行)
我该怎么做?
答案 0 :(得分:1)
我不相信Postgres中的表值函数可以保证结果的排序。您需要使用order by
或其他一些机制。
如果您希望最近的日期显示负值:
select max(date)
from func1(ID) t
where qty < 0;
如果您有其他订购方式:
select date
from func1(ID) t
where qty < 0
order by rownum desc -- your order by conditions here, but inverted
fetch first 1 row only;
如果您愿意,这将允许您从行中获取其他值。
答案 1 :(得分:1)
您可以使用ROW_NUMBER
:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (ORDER BY rownum DESC) as rn
FROM func1(ID)
WHERE qty < 0
)
SELECT *
FROM cte
WHERE rn = 1;