问题标签 [window-functions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
276 浏览

postgresql - 如何在 PL/pgSQL 中编写此函数

我有一个具有以下架构的表:

我想编写一个foofunc()引用前一行并根据以下逻辑返回值的函数:

我希望能够foofunc()像这样调用函数:

我该如何实施foofunc()

0 投票
4 回答
426 浏览

sql - ROW_NUMBER() 显示意外值

我的表具有如下值(RowCount由下面的查询生成):

ID列是 IDENTITY 列。
我正在使用这个查询来获取连续的行数

我得到的RowCount值对于大多数值是正确的,但对于某些值是错误的。例如:

  • ID 1699100 价格 58.13 – 计数应为 1(显示 3)。
  • ID 1699104 价格 57.96 – 计数应为 1(显示 2)。
  • ID 1699105、1699106 价格 57.93 – 计数应为 1、2(显示 2、3)。

我在 PostgreSQL 中尝试了相同的查询并发现了相同的结果。
我在这里上传了一个 csv 数据样本

我对分区的这种意外结果感到困惑。有谁能够帮助我?

0 投票
1 回答
212042 浏览

sql - 在 postgres 中选择行号

如何在 postgres 中选择行号。

我试过这个:

并得到这个错误:

我检查了这些页面:如何在 PostgreSQL 查询中显示行号?


这是我的查询:

这是错误:

错误:“over”处或附近的语法错误 LINE 1:选择 row_number() over (ORDER BY cgcode_odc_mapping_id)as

0 投票
1 回答
675 浏览

sql-server-2008 - 使用 Count() 和窗口函数的 sql 内部连接

还有一个名为 的表tblCustomers,其中有一列isAssistentType( bit)

我尝试进行内部联接,但这对我来说太复杂了,并且在尝试应用 with 的过滤器时出现inner join错误

我将非常感激并很高兴知道如何编写正确的语法

重新编辑

错误,我最后一次尝试

消息 4104,级别 16,状态 1,行 14 无法绑定多部分标识符“tblProblems.CustID”。消息 4104,级别 16,状态 1,行 12 无法绑定多部分标识符“tblproblems.problemID”。消息 4104,级别 16,状态 1,第 12 行无法绑定多部分标识符“tblproblems.custID”。消息 4104,级别 16,状态 1,第 12 行无法绑定多部分标识符“tblproblems.StationName”。消息 4104,级别 16,状态 1,第 12 行 无法绑定多部分标识符“tblproblems.problemCode”。消息 4104,级别 16,状态 1,第 12 行无法绑定多部分标识符“tblproblems.ProblemCreateDate”。

这是我的疯狂猜测:

目的是仅在 tblCustomers.isAssistent=1 时选择 tblProblems 的结果

0 投票
3 回答
1566 浏览

sql - PostgreSQL 发现最后三个登录日期之间的差异

我想为每个客户获取最后三个登录日期,并找到在上次登录 (login3) 和上次登录 (login1) 之前的时间超过 4 天的客户。

“活动”表包含:

  • 用户身份
  • login_date 为 DATETIME 格式,但时间始终为 00:00:00
  • (以及其他一些与问题字段无关的)

我尝试了几个查询,但没有一个能正常工作。

0 投票
2 回答
2016 浏览

sql - 在 SELECT 中过滤掉重复的后续记录

(PostgreSQL 8.4) 表“trackingMessages”存储移动设备 (tm_nl_mobileid) 和固定设备 (tm_nl_fixedId) 之间的跟踪事件。

这里的问题是,同一台手机可能随后会连接到同一台固定设备两次(或更多次)。我不想看到后面的那些,但是可以在以后看到移动设备连接到同一个固定设备,前提是两者之间有不同的固定设备连接。

我想我很接近但不完全。我一直在使用以下 CTE(在 Stack Overflow 上找到)

给我以下结果

这里的问题是最后一列应该是 1, 1, 1, 2, 1,因为第三个“32”实际上是一个重复的跟踪事件(在同一行中固定两次)并且最后一个连接到“21 " 是可以的,因为 "32" 介于两者之间。

请不要建议使用光标,这是我目前试图摆脱的。游标解决方案确实有效,但考虑到我必须处理的记录数量,它太慢了。我宁愿修复 CTE,只选择哪里RN = 1……除非你有更好的主意!

0 投票
1 回答
1473 浏览

sql - 跳过特定条件和正确使用 Lead() 的 SQL 差距

(PostgreSQL 8.4)继续我之前的示例,我希望进一步了解使用窗口函数处理间隙和孤岛。考虑下表和数据:

如前所述,设备会打开和关闭,这一次我希望提取一个特定的序列:

  • 显示所有ON不重复的新状态记录(同一设备连续两次)
  • OFF从当前ON设备显示适当的状态

我能得到的最接近的是:

这会过滤掉样本不包含的更多虚假数据,但本质上是关于取出后续重复项(无论状态如何)和OFF不匹配的顶级记录。Records 3, 4, 5and6被返回,但我不想要第五个,它OFF是在 new 之后出现的ON。所以我需要跳过这个差距并为OFF当前活动的设备寻找下一个合适的设备。

  1. 10 关闭——在这种情况下是假的,但会弄乱 lag()
  2. 11 关闭——在这种情况下是假的,但会弄乱 lag()
  3. 11 开启 -- 好的,新序列,包含在 SELECT 中
  4. 10 次打开 -- 好的,新序列,包含在 SELECT 中
  5. 11 关闭——消息来晚了,需要忽略间隙
  6. 10 次关闭 -- 好的,正确关闭到第 4 行,需要包含在 SELECT 中

一旦正确过滤,我想lead()在这一切之上使用来获取下一行的 id(想象一个时间戳)以及过滤掉所有不是ON状态的记录。我想这将需要三个嵌入式 SELECT 语句。这将使我清楚地了解设备处于活动状态的时间,直到另一个ON或适当转弯的条件OFF

0 投票
1 回答
3542 浏览

sql - rank() 函数附近的语法错误

我写了一个需要重写的 SQL 查询。基本上,它做了这样的事情:

它与 PostgreSQL 的最新版本完美配合。

但是,以下指令:

...使用当前安装的 PostgreSQL 版本生成语法错误,我必须找到绕过它的解决方案,但我不知道。

错误:查询失败:错误:“over”处或附近的语法错误第 21 行:rank() over (partition by ...

0 投票
3 回答
200 浏览

mysql - 模拟 row_number 函数

我有 X 个类别、Y 个论坛和 Z 个线程。

  • 主题属于一个论坛
  • 论坛属于一个类别

  • 我希望能够选择 X 类别和

    • 为每个类别选择前 3 个论坛和
    • 为每个论坛选择前 4 个主题。

(数字仅作为示例)

我通过变量模拟 row_numbers 来做到这一点,因为 mysql 不支持这个开箱即用。

不幸的是,行号仍然有问题。也许有人可以看看这里有什么问题。为了更好的可读性,我在此处上传了带有代码突出显示的查询和结果

结果如下所示:

最后我需要能够指定:

  • 其中 CatRow <= 9 并且
  • 论坛行 <= 3
  • AND ThreadRow <= 4

由于错误的row_numbers,这还不可能。有任何想法吗???

实际上我希望结果看起来像这样:

为了更好的可读性,我上传了带有代码突出显示的查询和结果图片:http: //i.stack.imgur.com/9tzmH.png http://i.stack.imgur.com/xXF6U.png

0 投票
3 回答
131 浏览

sql - SQL:忽略一些返回的行,删除其他的

我有这张桌子:

我必须使用以下特定规则从该表中删除项目:

  • 对于每个recipient_id,我们保留最后阅读的 5 个项目,并删除旧的阅读项目。

我试图用RECURSIVE WITH陈述来改变我的想法,但惨遭失败。我已经以编程方式实现了我的解决方案,但我想知道是否有一个像样的纯 SQL 解决方案。