sql - 奇怪的交错要求
问题描述
我有一个日志表,其中包含(简单地说)、用户、操作、日期。有两种操作:搜索和查看(搜索可能返回一百条记录;用户可能查看零条或更多条记录)。
我需要按日期对基本输出进行排序,但我还需要将所有视图放在一起进行一次搜索。就像是
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 达到天花板。:-/
解决方案
您可以使用窗口函数来识别组。并且您可以在 中包含窗口函数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。
推荐阅读
- python - Pandas - 从现有数据创建二进制数据
- javascript - Maxmind列出一个州的所有城市
- python - 如何在 Pandas 中合并四个表?
- git - 恢复合并而不取消提交后完成
- node.js - 在 nodejs 脚本文件中无法访问环境变量
- batch-file - x复制到目录的顶层文件夹
- javascript - 直接在视图中输出数据和消息
- javascript - Node.js puppeteer - 如何设置导航超时?
- angular - 我在角度 6 中执行 (ngSubmit) 后表单没有刷新
- css - 带有空格 nowrap 的导航栏中的下拉菜单 - BS4