栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

选择过去3项比赛中未获得第一名的终点

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

选择过去3项比赛中未获得第一名的终点

我认为这可以更简单/更快:

SELECt day, place, athleteFROM  (   SELECt *, min(place) OVER (PARTITION BY athlete        ORDER BY day        ROWS 3 PRECEDING) AS best   FROM   t   ) subWHERe  best > 1

- > SQLfiddle的

使用聚合函数

min()
作为窗口函数来获取最后三行加上当前行的最小位置。
然后
best > 1
必须在下一个查询级别对“ no win”()进行细微的检查,因为在子句 之后
应用了窗口函数
WHERe
。因此,您需要至少一个CTE的子选择条件才能满足窗口函数结果的条件。

手册中有关窗口函数调用的详细信息。特别是:

如果

frame_end
省略,则默认为
CURRENT ROW

如果

place
finishing_pos
)可以为NULL,请改用以下方法:

WHERe  best IS DISTINCT FROM 1

min()
忽略
NULL
值,但是如果框架中的所有行均为
NULL
,则结果为
NULL

不要使用类型名称和保留字作为标识符,我会用

day
您代替
date

假设每天最多进行1场比赛,否则您必须定义如何在时间轴上与同龄人打交道或使用

timestamp
代替
date

@Craig已经提到了索引以使其快速。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/378238.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号