sql - 如何为此用例编写 SQL 查询?
问题描述
假设我有一个包含三个字段的表:event_name
, event_timestamp
event_result
. 每一行都是一个事件 event_name
的发生,发生在event_timestamp
some event_result
。例如:
event_name | event_timestamp | event_result
-------------------------------------------
event_a | 2018-04-29 00:00 | result_x1
event_a | 2018-04-29 00:00 | result_x2
event_b | 2018-04-29 00:00 | result_x1
event_a | 2018-04-29 00:00 | result_x3
event_b | 2018-04-29 00:00 | result_x3
现在我需要一个 SQL 查询来为给定范围内的每一行选择最新 的行。event_timestamp
event_name
event_timestamp
您将如何编写这样的查询?我想它应该是适用于任何合理 SQL 数据库的标准 SQL。
解决方案
使用subquery
:
select *
from table t
where event_timestamp = (select max(event_timestamp)
from table
where event_name = t.event_name);
而且,一般来说最有效的方法是使用排名函数(如果支持)
select * from (
select *,
row_number() over (partition by event_name order by event_timestamp desc) Seq
from table t
where event_timestamp between @start and @end
) t
where Seq = 1;
推荐阅读
- angular - D3.js V3 for angular 2+,填充样式打字稿错误
- flutter - 如何使用 Android 的 TextEdit 而不是 Flutter Textfield
- r - 如何获得小标题中每个前 5% 步骤的平均值?
- c# - 如何创建 Xamarin.Forms 卡片轮播?
- java - 在java中为对象数组列表实现归并排序
- python - 如何在垂直输出整数旁边垂直打印数字标签作为计数?
- cmd - 在 Win CMD 上登录 AWS ECR
- c# - 在 C# 中执行获取请求?
- schema - Prestashop 在谷歌搜索中缺少字段“价格”
- python - 启动python,显示以下日志,但是烧瓶已安装