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

sql - 如何结合 Arel / ActiveRecord 使用“DISTINCT ON”?

我有一个MessageActiveRecord 模型,我想选择所有具有不同conversation_partner_id. 我目前将该DISTINCT ON子句指定为字符串,但我想知道是否可以将其作为Arel表达式提供,以及是否会有好处。我的陈述如下:

wheretmessages表的并集,并指定为有点复杂的Arel表达式。我把它排除在外,因为它独立于SELECT问题并且工作得很好。

以下代码不起作用

它会导致格式错误的 SQL,因为它在DISTINCT ON ()子句后放置一个逗号:

0 投票
1 回答
955 浏览

sql - postgresql - 仅在一列上不同

我有一张叫做可食用的桌子。它具有类型、名称等列。

类型列有fruit, veggie, veggie, fruit, veggie值。

name列有apple, brinjal, carrot, banana, cabbage.values

我希望输出为,类型列必须仅显示 2 行,名称应显示所有值。

它应该如下所示:

可食用的

我已经尝试了以下查询,但这不是我所期望的:

帮帮我!!

0 投票
3 回答
4413 浏览

sql - POSTGRES 最小值/最小值

我有一个包含两列的 postgres 9.3 表。第一列有时间,第二列有路线。一条路线可能有多次。我想列出所有最短时间的路线。我的桌子:

我想要的输出:

任何帮助都会得到帮助,并提前致谢。

0 投票
2 回答
6279 浏览

postgresql - Redshift PostgreSQL Distinct ON 运算符

我有一个要解析的数据集以查看多点触控归因。该数据集由响应营销活动的潜在客户及其营销来源组成。

每个潜在客户都可以响应多个活动,我希望在同一个表中获得他们的第一个营销来源和最后一个营销来源。

我在想我可以创建两个表并使用两者的 select 语句。第一个表将尝试创建一个包含每个人的最新营销来源的表(使用电子邮件作为他们的唯一 ID)。

然后我会创建一个包含重复数据删除电子邮件的表格,但这次是针对第一个来源。

最后,我想简单地选择电子邮件并将第一个和最后一个市场来源加入到各自的列中。

由于 distinct on 不适用于 redshift 的 postgresql 版本,我希望有人有想法以另一种方式解决这个问题。

编辑 2/22:有关更多背景信息,我正在与他们回应的人员和活动打交道。每条记录都是一个“活动响应”,每个人都可以有多个来源的多个活动响应。我正在尝试制作一个选择语句,该语句将按人进行重复数据删除,然后分别为他们响应的第一个广告系列/营销来源和他们分别响应的最后一个广告系列/营销来源提供列。

编辑 2/24:理想的输出是一个有 4 列的表:email、last_source、first_source、date。

第一个和最后一个源列对于只有 1 个活动成员记录的人是相同的,而对于拥有超过 1 个活动成员记录的每个人来说是不同的。

0 投票
1 回答
673 浏览

ruby-on-rails - 选择 distinct on 不能正常工作 rails 4.2.5

我有这两个模型:

如您所见,我尝试在我的 Post 模型上实现全文搜索。我构建了 TSVECTOR 列并触发来更新它,如果我只使用search_tsv范围,所有的工作就像一个魅力。

但我希望搜索结果中的每篇文章都能检索最后添加的评论。为此,我建立了full_search范围。

当我尝试使用此范围时,生成的 SQL 查询如下所示:

这对我来说看起来不错。但是当我尝试在我的搜索控制器中使用这个范围时,结果很奇怪......如果我这样做:

它生成这个 SQL 查询:

结果是一个空数组:(。

我无法理解我做错了什么[显然我在这里做了一些愚蠢的事情:(]。

你能帮我解决这个问题吗?

0 投票
3 回答
529 浏览

sql - 涉及两个连接的 CTE 的奇怪行为

为了让问题更容易理解,这篇文章已经完全改写了。

PostgreSQL 9.5运行的设置Ubuntu Server 14.04 LTS

数据模型

我有数据集表,我在其中单独存储数据(时间序列),所有这些表必须共享相同的结构:

此定义来自 a FUNCTION,因此%s代表数据集名称。

约束确保给UNIQUE定数据集中不能有重复记录。此数据集中的记录是floatvalue给定通道 ( ) 的值 ( ),在给定时间 ( ) 在给定间隔 ( ) 上channelid采样,具有给定质量 ( )。无论值是什么,都不能有 的副本。timevaluegranulityidqualitycodeid(channelid, timevalue, granulityid, qualitycodeid)

数据集中的记录如下所示:

我还有另一个卫星表,我在其中存储频道的有效数字,这个参数可以随时间变化。我以以下方式存储它:

当为通道定义了有效数字时,会在此表中添加一行。然后该因素自该日期起适用。第一条记录始终具有标记值'-infinity'::TIMESTAMP,这意味着:该因子从一开始就适用。接下来的行必须有一个实际定义的值。如果给定通道没有行,则表示有效数字是单一的。

此表中的记录如下所示:

目标

我的目标是对由不同进程填充的两个数据集进行比较审计。为了实现它,我必须:

  • 比较数据集之间的记录并评估它们的差异;
  • 检查相似记录之间的差异是否包含在有效数字内。

为此,我编写了以下查询,其行为方式我不理解:

该查询可能有点不可读,我大致期望它:

  • 使用唯一性约束连接来自两个数据集的数据以比较相似记录并计算差异(S0);
  • 对于每个差异,找到LEFT JOIN适用于当前时间戳 ( ) 的有效数字 ( S1);
  • 执行一些其他有用的统计数据(S2和最终SELECT的)。

问题

当我运行上面的查询时,我缺少行。例如:两个表(和)channelid=123共有12 条记录。当我执行整个查询并将其存储在 a中时,只有不到 12 行。然后我开始调查以了解为什么我丢失了记录,并且我遇到了一个奇怪的子句行为。如果我执行这个查询,我得到:granulityid=4datastore.rtudatastore.audit0MATERIALIZED VIEWWHEREEXPLAIN ANALIZE

而且我知道我必须有 67106 行。

在撰写本文时,我知道S0返回正确数量的行。所以问题肯定出在更远的地方CTE

我发现真正奇怪的是:

返回 10 行:

下一个返回正确的行数:

在哪里:

因此问题似乎出在S1. 没有为 定义有效数字channelid = 123,因此,不应在没有 的情况下生成这些记录LEFT JOIN。但这并不能解释为什么会有一些缺失。

问题

  • 我在这个查询中做错了什么?

当我获取有效数字时,我使用LEFT JOIN它来保持正确的基数,因此它不能删除记录,之后它只是算术。

  • 预过滤如何返回比后过滤更多的行?

这对我来说听起来有点麻烦。如果我不使用WHERE子句,则会生成所有记录(或组合)(我知道这JOIN是一个WHERE子句),然后进行计算。当我不使用其他WHERE(原始查询)时,我会错过行(如示例中所示)。当我添加 WHERE 子句进行过滤时,结果会有所不同(如果后过滤返回的记录多于预过滤,这可能很好)。

欢迎任何指出我的错误和对查询的误解的建设性答案。谢谢你。

0 投票
1 回答
9 浏览

distinct-on - 仅不同的 1 列

我正在尝试编写一个查询来返回每个特定类别的通话时间总和。只有 3 个类别,我只希望与时间总和一起返回 3 行。我认为使用 distinct 会起作用,但它也适用于分钟。

如何操纵此查询以仅在类别上有所不同?

0 投票
2 回答
75 浏览

sql - 跨许多字段获取不同的信息,其中一些字段为 NULL

我有一个超过 6500 万行和 140 列的表。数据来自多个来源,至少每月提交一次。

我寻找一种快速的方法来从这些数据中获取特定字段,仅在它们唯一的地方。问题是,我想处理所有信息以链接发送的发票与哪些识别号以及由谁发送。问题是,我不想迭代超过 6500 万条记录。如果我能得到不同的值,那么我只需要处理 500 万条记录,而不是 6500 万条。请参阅下面的数据描述和示例的SQL Fiddle

如果说客户每个月提交一个invoice_number链接,我只想要出现这个的一行。passport_number_1, national_identity_number_1 and driving_license_1即 4 个字段必须是唯一的

如果他们将上述内容提交 30 个月,那么在他们发送invoice_number链接的第 31 个月passport_number_1, national_identity_number_2 and driving_license_1,我也想选择这一行,因为该national_identity字段是新的,因此整行是唯一的

  • 我的意思是它们出现在linked to同一行
  • 对于所有字段,都可能在某一点出现 Null。
  • 'pivot/composite' 列是 invoice_number 和 submit_by。如果其中任何一个不存在,请删除该行
  • 我还需要将 database_id 包含在上述数据中。即由postgresql数据库自动生成的primary_id
  • 唯一不需要返回的字段是other_column and yet_another_column。请记住该表有 140 列,因此不需要它们
  • 使用结果,创建一个新表来保存这些唯一记录

请参阅此SQL fiddle以尝试重新创建场景。

从那个小提琴中,我期望得到如下结果:

  • 第 1 行、第 2 行和第 11 行:只保留其中一个,因为它们完全相同。最好是最小的那一行id
  • 第 4 行和第 9 行:其中一个将被删除,因为它们完全相同。
  • 第 5、7 和 8 行:将被删除,因为它们缺少 invoice_numbersubmitted_by
  • 结果将具有行(1、2 或 11)、3、(4 或 9)、6 和 10。
0 投票
2 回答
45 浏览

sql - 按 id desc 在多列不同的 postrges 上排序

我想从表中选择所有在impressable_id 和impresssionable_type 上唯一的最后印象,按id 降序排列并获得最后10

为了进一步解释这一点

理想情况下我想要这个

我尝试过 distinct 和 group by,但我的 sql 知识充其量是公平的。

我明白了

有人可以阐明一下吗

0 投票
1 回答
87 浏览

vba - Access - 根据字段值选择 Distinct

我的代码

我有一个访问查询:

查询的基本概念... 根据各个里程碑的状态(LIST_RequestBurndown_Q.MilestoneStatus),确定一个 RequestID 的整体状态([Request-Priority, ALL_Q].RequestID)。

我的问题

对于某些 RequestID,会有多个状态的里程碑。例如,我可能会得到如下结果:

我想做的是“优先化”,它RequestStatus显示所以每个RequestID.

我一直在尝试考虑如何使用ORDER BY, WHERE,来执行此操作DISTINCT ON,或者甚至可能只是创建一个具有相关优先级的可能状态选项表并使用MAX- 但此时我只是想多了。任何帮助将不胜感激!