给出在一场比赛中取得的分数和它们发生的次数的列表,我想要检索每个分数在达到时和达到最高的时间的列表:本质上,是高分数的递增.请看下表(按时间戳排序,每个分数都比之前的所有分数都要高,用星号标记):

Score Timestamp Notes
5* 00:12 2022-08-09
6* 01:15 2022-08-09
2 01:30 2022-08-09 worse than current high score of 6, so no asterisk
10* 02:01 2022-08-09
7 03:45 2022-08-09 worse than current high score of 10
12* 03:50 2022-08-09
1* 00:05 2022-08-10 note different day!
6* 01:01 2022-08-10

我想要一个只返回星号分数的查询(也就是:只返回比之前所有分数更好的分数),以及它们相关的时间戳.因此,如果我运行查询2022-08-09,结果应该是:

Best Score Timestamp
5 00:12
6 01:15
10 02:01
12 03:50

如果这需要特定于方言的SQL,那么有问题的数据库引擎就是SQLite.

推荐答案

假设您的时间戳具有正确的格式YYYY-MM-dd HH:MM,您可以使用MAX()窗口函数来判断每一行的当前分数是否为当前最高分数:

WITH cte AS (
  SELECT *, Score = MAX(Score) OVER (ORDER BY Timestamp) flag
  FROM tablename
  WHERE date(Timestamp) = '2022-08-09'
)
SELECT Score, time(Timestamp) Timestamp, Notes
FROM cte
WHERE flag;

See the demo.

Sql相关问答推荐

如何在VB.NET中使用MS SYS根据开始和结束期间日期进行查询

SQL—如何在搜索的元素之后和之前获取元素?

转换表中的数据

如何优化我的功能以减少花费的时间?

使用列表作为参数进行 Select ,如果为空,则在PostgreSQL中不使用参数进行 Select

如何计算给定日期前三个月的值以及月初数据?

PostgreSQL-按距离阈值挤压相邻行的性能

查找滑动窗口框架中的最大和最小列值

在Postgres,什么是;.USSTZ;在';YYYY-MM-DD;T;HH24:MI:SS.USSTZ';?

根据具有特定值的 ID 创建自定义组

YEAR 函数仍然不可SARGable 吗?

如何解释 SQL Server 中的 Foxpro 语法?

将空 JSON 数组添加到 SQL Server 表列中的 JSON 字符串

在给定的日期范围内填写缺失的日期

根据是否存在值组合分组并 Select 行

编写查询以根据级别 (p2) 返回父位置

使用日期和间隔作为键加入 Athena 上的表?

如何根据某个值在where子句中添加某个条件

如何跨行合并以删除 SQL 中的空值?

sql count distinct by column 和 sum false 和 true