我正在尝试编写一个查找行(可能包含任何内容)的查询,该行位于包含特定内容的行之后。
我不完全确定如何最好地实现这一点,我最初的想法是编写一个子查询来索引或排序数据,并以某种方式指定输出到主查询的索引。
我想要包含一张图片以帮助解释,但我被告知我无法发布图片。作为替代方案,我发布了一个示例数据集下方图片的链接,试图说明我正在尝试做什么(感谢审核小组的理解):
https://postimg.org/image/va7n814s9/
所以希望现在你可以看到图片了,我基本上试图让子查询输出绿色行。
逻辑上,通过搜索表来查找队列42的实例(以蓝色突出显示)并输出下一行,它将知道这样做。如果队列42有多个实例,我希望子查询专注于最新实例并忽略之前的实例。
另外,我将通过NaviCat使用postgresql来运行查询。
我希望我对上述问题有所了解,如果您需要任何澄清,请告诉我。任何帮助将非常感激。
答案 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
。