首页 > 解决方案 > 奇怪的交错要求

问题描述

我有一个日志表,其中包含(简单地说)、用户、操作、日期。有两种操作:搜索和查看(搜索可能返回一百条记录;用户可能查看零条或更多条记录)。

我需要按日期对基本输出进行排序,但我还需要将所有视图放在一起进行一次搜索。就像是

 name    operation     date
 john    search        1/1 1pm
 john    view          1/1 2pm
 john    view          1/1 3pm
 james   search        1/1 230pm
 james   view          1/1 315pm
 john    search        1/1 310pm

看来我需要使用子查询的结果来执行查询,但我不确定那会是什么样子。我对 SQL 没问题,但我有点用 JOIN 和 UNION 达到天花板。:-/

标签: sqloracle

解决方案


您可以使用窗口函数来识别组。并且您可以在 中包含窗口函数order by,因此不需要子查询。

select *
from log_table l
order by max(case when l.operation = 'search' then l.log_date end) over (partition by l.name order by l.log_date),
         l.name,
         l.log_date;

是一个 db<>fiddle。


推荐阅读