问题标签 [distinct-on]

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 投票
2 回答
25401 浏览

sql - SQL:“DISTINCT ON(表达式)”有什么作用?

我了解如何DISTINCT工作,但我不明白DISTINCT ON (expression)

以该屏幕截图中的第一个示例为例:

在此处输入图像描述

该部分如何(a % 2)影响一切?是不是说如果a % 2计算结果为真,则返回它,然后对所有其他元组继续这样做,但仅在返回值不同时才返回?

0 投票
1 回答
46 浏览

sql - 为什么我的 DISTINCT ON 表达式不起作用?

询问:

我有一个包含重复项的边缘表,我想删除重复的边缘保留其中一个,但是语法本身是错误的吗?

0 投票
1 回答
79 浏览

postgresql - 在 Postgres 中使用 DISTINCT ON 返回哪一行

当我DISTINCT ON在 PostgreSQL 中使用(在 django 中不同)时,在具有相同字段的行组中检索了哪些行?

0 投票
1 回答
55 浏览

sql - 在不使用子查询的情况下使用 SELECT DISTINCT ON 计算总行数

我使用 PostgreSQLSELECT DISTINCT ON语法执行了一些查询。我想让查询在每个结果行旁边返回总行数。

假设我有一个my_table如下表:

然后我有几个值:

基本上my_table包含一些版本化的数据。这id_reference是对数据库全局版本的引用。对数据库的每次更改都会增加全局版本号,并且更改将始终向表中添加新行(而不是更新/删除值),并且它们将插入新的版本号。

我的目标是执行一个只检索表中最新值以及总行数的查询。

例如,在上述情况下,我想检索以下输出:

我的尝试如下:

这将返回几乎正确的输出,除了total是行数my_table而不是结果查询的行数:

如您所见,它具有5而不是预期的3.

我可以通过使用子查询和count聚合函数来解决这个问题:

这产生了我的预期输出。

我的问题:有没有办法避免使用这个子查询并有类似的东西来count(*) over ()返回我想要的结果?

0 投票
3 回答
3871 浏览

postgresql - Postgres : Need distinct records count

I have a table with duplicate entries and the objective is to get the distinct entries based on the latest time stamp.

In my case 'serial_no' will have duplicate entries but I select unique entries based on the latest time stamp.

Below query is giving me the unique results with the latest time stamp. But my concern is I need to get the total of unique entries.

For example assume my table has 40 entries overall. With the below query I am able to get 20 unique rows based on the serial number. But the 'total' is returned as 40 instead of 20. Any help on this pls?

enter image description here

0 投票
2 回答
468 浏览

sql - Postgresql 中的 SELECT DISTINCT ON 返回多行

当我跑

我希望单行对应于ts满足条件的最大的行,并通过采用最低的来打破平局version

查询返回

我不明白为什么要返回两个不明显ts的。是否有类似的查询会返回所需的结果?

0 投票
3 回答
545 浏览

sql - PostgreSQL 性能:查询达到 52 周高点的股票(加入最大值行)

我有一个非常简单的数据库结构,其中包含“日终”股票价格,类似于:

(instrument_id 是股票的唯一 ID)

我现在想选择所有instrument_id在本周达到 52 周高点的股票。(即close最近 7 天的列高于前 52 周的所有股票)

我尝试了许多不同的方法:group by 和 max()、select distinct on、窗口函数(row_number),但我没有设法让它低于 150 秒。我目前最好的(也是最简单的)方法是:

我很清楚有许多类似的问题,但这些方法让我找到了一个可行的解决方案,但没有一个能帮助我提高性能。该表包含来自不同 28000 支股票的 1000 万行。这只会变得更大。有没有办法在不进行非规范化的情况下通过不到 2 秒的查询来实现这个要求?显然,任何类型的索引等都可以。

上述方法的查询计划:

我当前的(基本上是随机的)索引:

0 投票
2 回答
4163 浏览

sql - 在一列上选择 Distinct,不按该列排序

我试图只选择我正在查询的表的 ID,并且仍然能够指定其他列的排序。

首先,我尝试简单地做:

那是行不通的,因为 for SELECT DISTINCTORDER BY表达式必须出现在选择列表中,并返回错误。

如果我添加province_infos.populationand country_infos.population,它可以工作,但是我会得到重复的 ID,这是我不能拥有的。

为了解决这个问题,我尝试使用DISTINCT ON()

那给了我错误SELECT DISTINCT ON expressions must match initial ORDER BY expressions。我也不能不SELECT DISTINCT ON订购专栏。

似乎唯一可行的方法是执行以下操作:

不幸的是,我不能这样做,因为我不能按 ID 排序,因为它会扭曲其他订单的结果。似乎唯一不按 ID 排序的方法是,如果我DISTINCT从选择中删除,但我会得到重复项。

任何人都知道我该如何解决这个问题?

编辑:我省略 的...不应该是相关的,但如果你想看到:

而且我不只是想让它适用于这个特定的查询。这只是我用来解释困境的一个例子。我正在从任意数据结构中自动生成这些类型的查询。

0 投票
0 回答
60 浏览

postgresql - 在 PL/pgSQL 中按不同类别进行高性能 KNN 搜索

对于我的硕士论文,我正在分析几种可能对移动服务提供商有用的算法(测试数据集基于移动音乐学校),以便在考虑教师现有学生的位置的情况下为新学生找到最佳教师。

所附代码为避免重复的简单 KNN(k-最近邻)搜索提供了正确结果。

由于“DISTINCT ON”要求 st.teacher_id 包含在 ORDER BY 子句中,因此不使用我在几何列“address_transform”上的 R-Tree-Index。一旦表大小变大(学生表为 100k 行),几何变得更复杂等,这会导致性能非常差。

任何想法如何重写函数以便使用索引?

注释:

  • 我正在使用动态查询,因为我正在使用多个真实/合成数据表(索引、非索引、集群等)进行测试

  • 我知道可以设置像 enable_seqscan 这样的配置参数,但这并不是我问题的永久解决方案

  • 作为替代方案,我已经实现了一个(非常快的)变体,我通过简单的 KNN 预先选择多个所需的邻居,然后在第二步中删除重复项。这适用于纯粹与距离相关的方法,但如果在后面的步骤中也考虑了除距离之外的其他参数,则预选不一定包含最佳匹配。

  • 我正在使用 postgres 10.4,postgis 2.4.4

0 投票
1 回答
378 浏览

postgresql - 使用 distinct on 加入多个表

我想显示相应的 emp_id、emp_no、emp_ref_no、class_no(emp_detail 表中基于 created at 的最新一个)以及 class_detail 表的所有列。Class_detail 表应显示该类的最新对应记录 no

我希望看到的预期输出如下所示:-