postgresql - 子查询,用于查找特定实例后的随机实例

时间:2017-01-12 17:48:49

标签: sql postgresql

我正在尝试编写一个查找行(可能包含任何内容)的查询,该行位于包含特定内容的行之后。

我不完全确定如何最好地实现这一点,我最初的想法是编写一个子查询来索引或排序数据,并以某种方式指定输出到主查询的索引。

我想要包含一张图片以帮助解释,但我被告知我无法发布图片。作为替代方案,我发布了一个示例数据集下方图片的链接,试图说明我正在尝试做什么(感谢审核小组的理解):

https://postimg.org/image/va7n814s9/

所以希望现在你可以看到图片了,我基本上试图让子查询输出绿色行。

逻辑上,通过搜索表来查找队列42的实例(以蓝色突出显示)并输出下一行,它将知道这样做。如果队列42有多个实例,我希望子查询专注于最新实例并忽略之前的实例。

另外,我将通过NaviCat使用postgresql来运行查询。

我希望我对上述问题有所了解,如果您需要任何澄清,请告诉我。任何帮助将非常感激。

1 个答案:

答案 0 :(得分:1)

这个怎么样?

select a.*
from actions a
where a.id > (select max(a2.id) from actions a2 where a2.queue = 42)
order by a.id
fetch first 1 row only;

这假定订购基于id。您也可以将其基于日期列。

另一种方法使用窗口函数:

select a.*
from (select a.*,
             max(case when queue = 42 then id end) over () as max_id42
      from a
     ) a
where id > max_id42
order by id
fetch first 1 row only;

这会将max()case一起使用。您还可以在更新版本的Postgres中使用filter