问题标签 [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 投票
3 回答
2014 浏览

sql - PostgreSQL - 查找具有特定值的最旧记录

我有一个文档管理系统,可以在历史表中记录所有历史事件。我被要求能够在给定日期为给定客户提供状态为 5 的最旧 doc_id。该表看起来像这样(为简单起见被截断):

client_id 和 status_id 列是事件发生后文档的值。这意味着由 doc_id 定义的文档的最大历史事件行将匹配文档表中的相同列。通过特定事件日期限制事件,您可以查看当时文档的值。因为这些值不是静态的,所以我不能简单地搜索 status_id 为 5 的特定 client_id,因为找到的结果可能与文档的 max(id) 不匹配。希望这有点道理。

我发现工作但很慢的是以下内容:

基本上,我在给定的最大事件日期之前获取特定文档 ID 的最大 ID,然后验证该最大历史项目是否已分配给给定客户端,状态设置为 5。

以我的方式这样做的缺点是我正在扫描所有客户的所有历史记录以获取它们的最大值,然后找到我正在寻找的一个客户和状态。截至目前,这扫描了大约 1506 万行,在我的开发服务器上大约需要 90 秒(这不是很快)。

为了使事情变得更复杂,我需要在前一周的每一天都这样做,或者每次运行总共七次。此外,系统中的所有单据都以状态 5 开头,表示新单据。这使得该查询将只返回为该客户端输入的第一个文档:

我希望做的是扫描,直到找到与特定客户端和状态值匹配的特定文档的最大历史记录,而不必首先找到所有客户端的所有文档 ID 的最大 ID。我不知道这是否可以通过窗口函数(分区)或我目前没有看到的其他逻辑来完成。

doc_history 表中的事件之一的示例:

事件 7 是状态改变,新旧值显示从 5 变为 1,这在 status_id 列中有所体现。对于小于或等于 2013-02-17 23:59:59 的 event_date,上述记录将是 status_id 为 5 的最旧的“NEW”文档,但在 2013 年 2 月 17 日之后就没有了。

0 投票
4 回答
1248 浏览

sql - 选择 DISTINCT 返回太多记录

我有两个表:产品和项目。我想根据列选择distinct属于产品的项目condition,按price ASC.

期望的输出:

这是查询。它返回六个记录而不是所需的三个:

0 投票
3 回答
594 浏览

mysql - 从多个供应商中为库存项目选择最新、最低的价格

我对 SQL 相当精通,但是这个问题让我自己困惑了很长一段时间。在最基本的意义上,只有两个表:

...和价格表:

(请注意:created_at 实际上是一个时间戳,提供“今天”和“昨天”这两个词只是为了快速传达这个概念)。

我的目标是返回一个简单的结果,其中包含与最新、最低价格相关的库存项目,包括对提供所述价格的 vendor_id 的引用。

但是,我发现绊脚石似乎是要处理的语句(或语句)要求的绝对数量:

  • 每个项目有多个供应商,因此我们需要确定每个项目的所有供应商之间哪个价格最低
  • 物品的新价格会定期附加,因此我们只想考虑每个供应商的每件物品的最新价格
  • 我们希望将所有这些汇总到一个结果中,每行一个项目,其中包括项目、价格和供应商

看起来很简单,但我发现这个问题非常困难。

请注意,我使用的是 Postgres,因此它提供的所有功能都可以使用(即:窗口函数)。

0 投票
1 回答
20506 浏览

sql - PostgreSQL:根据排序顺序仅选择每个 id 的第一条记录

对于以下查询,我只需要选择具有最低 shape_type 值(范围从 1 到 10)的第一条记录。如果你有任何关于如何轻松做到这一点的知识是 postgresql,请帮助。谢谢你的时间。

0 投票
2 回答
7184 浏览

php - 如何将“区别于”与教义一起使用?

我尝试在学说中使用“distinct on”,但出现以下错误:

错误:预期的已知功能,“开启”

我怎样才能实现以下查询?


显然,使用查询生成器似乎不可能做到这一点。我试图以不同的方式重写我的查询:

但是学说不支持 LIMIT:

我认为唯一的解决方案是使用本机 SQL 查询。

0 投票
1 回答
292 浏览

postgresql - PL/pgSQL:DISTINCT ON 是否将其结果传递到下一个 CTE?

我的代码看起来像这样(模式),因为它非常庞大:

所以想象一下这种情况:在使用DISTINCT ON (x1,x2,x3,x4something )之后

(忽略something2 and something3这里):我得到 1700 个结果。

问题是这不是我的预期结果(还),因为我需要使用更多的 CTE 来 leftjoin 一些信息

所以当我有相同的DISTINCT ONsomething并且我做

select * from something3(这是应返回 1700 行的最终预期结果)

我突然得到了 4000 个结果,其中包含我之前想要区分的值something

好像我丢失了DISTINCTIve type in something,因为当我输入相同的语法时:

DISTINCT ON (x1,x2,x3,x4) ...在所有三个中something's,我得到 1700 个结果 - 但这并不是我真正想要的。

时间对我来说很重要。

有人可以帮助我解决问题并更好地理解这里的问题吗?

0 投票
3 回答
305 浏览

postgresql - Postgres:不同但仅适用于一列和最新一列

我有以下原始表格

原始表

我想要的是用不同的new_id检索最新的history_id。如下:

期望的结果

我找到了这个distinct_but_only_one_column但它只包含如何检索不同的一列。请帮帮我。

0 投票
0 回答
41 浏览

sql - 对空的 n:n 关系使用 DISTINCT ON

我是 PostgreSQL 的新用户,正在尝试使用,DISTINCT ON但我无法达到我的目标。

这是我的数据库的简要草图:

  • 带有版本控制的文件
  • 带模型的字段(用于生成表单)
  • n:n文件版本和字段之间的关系

在此处输入图像描述

我想检索指定文件版本的一整套字段。
我的问题是我们可以(并且我们将)空值,即。缺少 FileVersion_Field 关系。我将尝试在下面给你一个例子:

在这个例子中,我想得到这些结果:

这是我尝试过的,但不起作用:

0 投票
1 回答
2136 浏览

sql - 如何在 PostgreSQL 9 中用 GROUP BY 替换 DISTINCT ON?

我一直在使用 DISTINCT ON 谓词并决定将其替换为 GROUP BY,主要是因为它“不是 SQL 标准的一部分,并且由于其结果的潜在不确定性而有时被认为是不好的风格”。

我将 DISTINCT ON 与 ORDER BY 结合使用,以便选择历史表中的最新记录,但我不清楚如何对 GROUP BY 执行相同操作。为了从一个结构转移到另一个结构,有什么通用方法?

一个例子可能是

我得到“最新”的(f1,f2)对。

0 投票
2 回答
282 浏览

postgresql - 当我使用偏移量时,PostgreSQL 会改变结果,限制

大家好,我正在使用以下查询
如果我将限制更改为 10 或 20,结果会有所不同
我正在学习 postgresql 我无法弄清楚问题
是什么 是否有 postgresql 特定警告?

预期结果

只是我想通过 wapi_issues.issue_identifier 获得不同的 wapi_publications 及其最后的问题

我的意思是说结果不同

限制为 10 时;

限制为 20 时;