从postgreSQL中的筛选结果中选择记录

时间:2017-10-24 13:59:07

标签: sql postgresql

我有一个函数,它给我有序的行(函数已经按结果排序):

通过执行: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的第一行)

我该怎么做?

2 个答案:

答案 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;