找出每个玩家最长的满分连续记录

2024-05-25

我得到以下结果SELECT查询与ORDER BY player_id ASC, time ASC在 PostgreSQL 数据库中:

player_id  points  time

395        0       2018-06-01 17:55:23.982413-04
395        100     2018-06-30 11:05:21.8679-04
395        0       2018-07-15 21:56:25.420837-04
395        100     2018-07-28 19:47:13.84652-04
395        0       2018-11-27 17:09:59.384-05
395        100     2018-12-02 08:56:06.83033-05
399        0       2018-05-15 15:28:22.782945-04
399        100     2018-06-10 12:11:18.041521-04
454        0       2018-07-10 18:53:24.236363-04
675        0       2018-08-07 20:59:15.510936-04
696        0       2018-08-07 19:09:07.126876-04
756        100     2018-08-15 08:21:11.300871-04
756        100     2018-08-15 16:43:08.698862-04
756        0       2018-08-15 17:22:49.755721-04
756        100     2018-10-07 15:30:49.27374-04
756        0       2018-10-07 15:35:00.975252-04
756        0       2018-11-27 19:04:06.456982-05
756        100     2018-12-02 19:24:20.880022-05
756        100     2018-12-04 19:57:48.961111-05

我试图找到每个球员最长的连续记录在哪里points = 100,决胜局是最近开始的那一个。我还需要确定该球员最长连续记录开始的时间。预期结果是:

player_id  longest_streak  time_began

395        1               2018-12-02 08:56:06.83033-05
399        1               2018-06-10 12:11:18.041521-04
756        2               2018-12-02 19:24:20.880022-05

A 间隙和岛屿 /questions/tagged/gaps-and-islands确实有问题。

假设:

  • “连胜”不会被其他玩家的行打断。
  • 所有列均已定义NOT NULL。 (否则你必须做更多的事情。)

这应该是最简单和最快的,因为它只需要两个快速row_number()窗函数 https://www.postgresql.org/docs/current/functions-window.html:

SELECT DISTINCT ON (player_id)
       player_id, count(*) AS seq_len, min(ts) AS time_began
FROM  (
   SELECT player_id, points, ts
        , row_number() OVER (PARTITION BY player_id ORDER BY ts) 
        - row_number() OVER (PARTITION BY player_id, points ORDER BY ts) AS grp
   FROM   tbl
   ) sub
WHERE  points = 100
GROUP  BY player_id, grp  -- omit "points" after WHERE points = 100
ORDER  BY player_id, seq_len DESC, time_began DESC;

数据库小提琴

使用列名ts代替time,这是一个保留字 https://www.postgresql.org/docs/current/sql-keywords-appendix.html在标准 SQL 中。它在 Postgres 中是允许的,但有限制,并且使用它作为标识符仍然是一个坏主意。

“技巧”是减去行号,以便连续的行属于同一组(grp) per (player_id, points). Then过滤 100 分的分数,按组汇总并仅返回每个玩家最长、最新的结果。
该技术的基本解释:

  • 选择最长的连续序列 https://dba.stackexchange.com/a/35389/3684

我们可以用GROUP BY and DISTINCT ON在相同的SELECT, GROUP BY被申请;被应用before DISTINCT ON。考虑事件的顺序SELECT query:

  • 在应用 LIMIT 之前获取结果计数的最佳方法 https://stackoverflow.com/questions/156114/best-way-to-get-result-count-before-limit-was-applied/8242764#8242764

About DISTINCT ON:

  • 选择每个 GROUP BY 组中的第一行? https://stackoverflow.com/questions/3800551/select-first-row-in-each-group-by-group/7630564#7630564
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

找出每个玩家最长的满分连续记录 的相关文章

随机推荐

  • 如何在 Java2D 中进行双缓冲?

    我正在屏幕上使用 Java2D 绘制一堆基元 并且出现很多撕裂 闪烁 如何启用 使用双缓冲 以便将其绘制出屏幕然后显示整个内容 您创建一个 BufferedImage 实例 为了获得最佳性能 您需要确保 缓冲图像使用与您要渲染到的屏幕相同的
  • 参考:什么是变量范围,哪些变量可以从哪里访问以及什么是“未定义变量”错误?

    注意 这是一个处理 PHP 变量作用域的参考问题 请将符合此模式的众多问题中的任何一个作为此问题的重复项关闭 PHP 中的 变量范围 是什么 一个 php 文件中的变量是否可以在另一个 php 文件中访问 为什么我有时会得到 未定义的变量
  • 如何编写 sbt 插件来通过代理启动应用程序

    我想在开源之前为我的项目创建一个 sbt 插件 该项目在应用程序运行开始时附加一个 Java 代理 以对其进行各种类型的分析 代理写出文本文件以供以后处理 我希望能够编写一个 sbt 插件 有一个替代方案run called runWith
  • 使用 Swift 4 的 Decodable 解码 Void

    我有一个通用的 REST 请求 struct Request
  • 集成测试和单元测试(WEB API mvc 4)

    集成测试和单元测试与 APIController 测试有何关系 在集成测试中创建 Web 请求时如何模拟存储库 以便它不会对数据库进行实际查询 您可以使用自托管 http code msdn microsoft com ASPNET Web
  • 不加载隐藏图像

    我的网站上有一堆隐藏图像 它们的容器 DIV 具有 style display none 根据用户的操作 某些图像可能会通过 JavaScript 显示 问题是我的所有图像都是在打开页面时加载的 我想通过仅加载最终可见的图像来减轻服务器的压
  • MongoDB - 使用聚合框架或 MapReduce 来匹配文档中的字符串数组(配置文件匹配)

    我正在构建一个可以比作约会应用程序的应用程序 我有一些结构如下的文档 db profiles find pretty id 1 firstName John lastName Smith fieldValues favouriteColou
  • ant basedir 和 eclipse .project 文件生成

    我有一个 ant 目标 它回显 eclipse project 文件的内容 这里的想法是确保 该项目可以轻松导入到 eclipse 中 项目名称应与所在目录匹配 它结帐 到目前为止我有这个
  • UIActionSheet 按钮的颜色

    如何更改 UIActionSheet 按钮的颜色 iOS 8 UIAlertController 如果您使用 UIAlertController 这非常简单 只需更改 UIAlertController 视图上的色调颜色即可 alertCo
  • 使用 Cordova 加载应用程序时如何配置状态栏颜色?

    我用 Cordova 创建了一个应用程序 我想改进 UI UX 使其看起来尽可能像本机应用程序 当应用程序第一次加载时 状态栏 和背景 的前几毫秒 实际上不到 1 秒 没有我配置的颜色Cordova 状态栏插件 https cordova
  • pprof 和 ps 之间的内存使用差异

    我一直在尝试分析用 cobra 构建的 cli 工具的堆使用情况 这pprof工具显示如下 Flat Flat Sum Cum Cum Name Inlined 1 58GB 49 98 49 98 1 58GB 49 98 os Read
  • 编辑/更改服务器上的 300 多项选择

    我编辑了所有服务器 http 状态消息 当我输入错误的地址时 300 个多项选择仍然显示 所以它向我显示选项 你知道我怎样才能摆脱它吗 我不希望用户有选择 我想重定向到 index html 或者我想显示自己创建的带有 gt 返回 的消息页
  • 使用Shiny和Shinydashboard时如何使图标大小一致?

    我在闪亮的应用程序中添加可点击的图标以显示弹出信息框 请参阅以下屏幕截图和代码示例 我的策略是将我的文本和代码包装起来actionLink in the HTML功能 这效果很好 然而 图标的大小是由关联的大小决定的 我想知道是否可以使所有
  • 如何在 2.x 中重载 Python 的 __bool__ 方法? [复制]

    这个问题在这里已经有答案了 我认为这应该打印 False 为什么它打印 True gt gt gt class Foo object def bool self return False gt gt gt f Foo gt gt gt if
  • Python - 整数因式分解为素数[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我写了一个整数分解函数 但是在搞乱它之后 我意识到它在处理一些数字时存在问题 gt gt gt pFactors 99 it does work fo
  • 如何访问 mmaped /dev/mem 而不导致 Linux 内核崩溃?

    我有一个简单的程序 尝试访问用户空间中的物理内存 其中内核存储第一个结构页 在 64 位机器上 该地址是 内核虚拟地址 ffffea0000000000 物理地址 0000620000000000 我正在尝试通过用户空间中的 mmap 访问
  • 替换 R 中内置函数的定义?

    sparcl 包使用标准 stat 包中的 kmeans 函数 我想让它使用我自己的 kmeans 实现 一种方法是编辑 sparcl 包本身中的代码 我宁愿避免这种情况 因为它会很混乱 而且我不确定如何在 R 中安装编辑过的代码 不幸的是
  • Android:检查是否必须询问运行时权限

    我想检查特定应用程序是否需要在运行时处理 Android Marshmallow 运行时权限 下面的假设正确吗 Checks whether runtime permissions must be handled or not param
  • Emberjs不会加载jquery/javascript,在页面中插入html时运行代码

    Help 我正在开发一个丰富的 emberjs yeoman 项目 该项目使用多个 hbs 模板 这些模板都可以从一个 application hbs 的侧边栏路由到 问题是当我加载页面时 有时使侧边栏折叠的 Jquery 不起作用 而同一
  • 找出每个玩家最长的满分连续记录

    我得到以下结果SELECT查询与ORDER BY player id ASC time ASC在 PostgreSQL 数据库中 player id points time 395 0 2018 06 01 17 55 23 982413