问题标签 [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 回答
215 浏览

postgresql - Grafana PostgreSQL 与时间序列不同 on()

我对 Grafana 和 Postgres 很陌生,可以在这方面使用一些帮助。我在 PostgreSQL 中有一个带有温度预测的数据集。dump_date同一参考日期在全天的不同时间点(用 表示)发布多项预测。假设:今天 06:00 和今天 12:00 发布明天的预报(时间用 表示start_time)。现在我想使用 Grafana 将温度预测可视化为时间序列。但是,我只想可视化最新发布的预测(12:00),而不是两个预测​​。我以为我会使用 DISTINCT ON() 仅从该数据集中选择最新发布的预测,但不知何故,对于 Grafana,这没有响应。我在 Grafana 中的代码如下:

但是,这不起作用,因为我收到消息:'AS 处或附近的语法错误'。我应该怎么办?

0 投票
1 回答
25 浏览

postgresql - 如何在 Postgres 中使用多个 distinct on 语句,同时保持正确的顺序

我在 Postgres 中有一张带有天气预报的表格,看起来像这样

在此处输入图像描述

在这里,每 15 分钟同时发布一次风力和太阳预报。我希望使用distinct on()语句从该表中选择最新的风能和太阳能预测。但是,当我仅在time列上使用它时,它会删除风预报,因为该预报在太阳能预报前一分钟被丢弃。我尝试过使用distinct on(time, forecast),但后来订单以某种方式搞砸了,我不再使用最新的dump_date(见下文)

在此处输入图像描述

如何distinct on()在保持顺序的同时在多个列上使用语句?我现在使用的查询是

这个查询保持动态很重要,所以硬编码dump_date对我来说不是一个选择。

0 投票
2 回答
98 浏览

sql - 如何获取每个月的第一行数据(postgres)

我是 postgres 的初学者,想获得每个月的第一行(分组),但我不确定如何。

我的表order如下:

预期结果应如下:

但是我无法使用下面的查询获得上述结果,其中我得到的结果与表相同:

0 投票
1 回答
26 浏览

mysql - Mysql仅更新第一个唯一匹配

我有一个表,其中多次出现的值(SKU)与另一列(column2)的某个值相关联。我想用 SKU 的第一个匹配更新 column2 的值。

更新表集 column2 = test where sku = 18。

我的 sku 值是 18 的两倍,但只想在第一次出现 sku = 18 时更新 column2。

如何

0 投票
1 回答
46 浏览

sql - SELECT DISTINCT ON (col) * 有效吗?

我想知道这是否有效并且会按预期工作。意思是,这会返回 my_table 中的所有列,基于 distinctsome_col吗?我已经阅读了 Postgres 文档,看不出有什么理由不能按预期工作,但是在这里阅读了关于 SO 的旧评论,其中指出在使用 distinct on 时需要明确列出列。

我知道最好的做法是明确列出列,并在执行上述操作时使用 order by。

您可能不需要或不关心的背景

对于背景和我问的原因,我们正在从 MySQL 迁移到 Postgres。MySQL 有一个非常不符合标准的“技巧”,SELECT * ... GROUP BY它允许一个轻松地select *基于group by. 以前关于将这种不符合标准的技巧迁移到 Postgres 的答案和评论充其量是模糊的。

0 投票
1 回答
124 浏览

sql - 如何在 Laravel Eloquent 中使用 DISTINCT ON

这是我的完整 SQL 语句:

我正在尝试将此语句转换为 Laravel Eloquent 代码:

  • 我读过 eloquent 不知何故不支持 DISTINCT ON 所以我不能简单地做distinctOn('group_id')
  • 如果是这种情况,有没有办法修改函数内部的选择以使用 DISTINCT ON?
0 投票
1 回答
96 浏览

sql - 如何在嵌套的 SELECT 查询 Postgresql 中聚合多行

我对复杂的 SQL 请求很陌生...

我想要实现的是在传单地图页面上显示活动天气警报的地图。

首先使用来自国家气象机构的 RSS 提要填充 Postgis 表,然后通过选择过期日期晚于实际日期的 ROW 并通过 Geoserver WFS 服务发布此视图来创建视图。

看起来不错,只是每个地理区域都添加了多个事件有效过期功能,从而导致了一种仅显示顶部事件的多层。

我遇到的问题是,对于每个区域/多边形,我都有多条线用于我必须整理的杂项事件/日期。

初始表的结构如下:

我试图解决这个烂摊子的方法是:首先为每个事件创建一个视图,以便每个位置只有“此类事件”的最新过期警报:

我对每个我感兴趣的事件都这样做了。

其次,我为每个区域创建了一个聚合视图,其中包含相关事件类型的内容:

所有这些东西都可以完成这项工作,但看起来更像是一把锤子来杀死一只苍蝇。

我确信有一种方法可以通过嵌套 SELECT 在一次运行中实现这一点,但绝对无法弄清楚如何:-(

欢迎任何建议,感谢您的帮助。

0 投票
1 回答
44 浏览

sql - 计算唯一行 GROUP(ed) BY 不同于 DISTINCT ON 中使用的列

我确信这已经被反复询问,但我找不到一个我可以完全理解的简单示例。

我正在尝试对DISTINCT ON一列进行重复数据删除(执行 a )并COUNT记录GROUPed By与用于重复数据删除的列不同的列,但不引入子查询。

假设我有一张包含以下信息的表格:

订单号 日期 地区 时间戳更新
001 2021-09-01 穆里卡 2021-09- 02 T19:00:01Z
001 2021-09-01 穆里卡 2021-09- 03 T19:00:01Z
002 2021-09-01 尤罗普 2021-09-02T19:00:01Z
003 2021-09-01 尤罗普 2021-09-03T19:00:01Z
004 2021-09-02 尤罗普 2021-09-03T19:00:01Z

我想首先获得具有不同order_num(保持最近更新)的唯一记录date然后按and计算组或订单region

  • 去重(去掉最旧的order_num='001A'):

    订单号 日期 地区 时间戳更新
    001 2021-09-01 穆里卡 2021-09- 03 T19:00:01Z
    002 2021-09-01 尤罗普 2021-09-02T19:00:01Z
    003 2021-09-01 尤罗普 2021-09-03T19:00:01Z
    004 2021-09-02 尤罗普 2021-09-03T19:00:01Z
  • 然后分组并计数:

    日期 地区 数数
    2021-09-01 穆里卡 1
    2021-09-01 尤罗普 2
    2021-09-02 尤罗普 1

我知道如何分别做这两件事(distinct on(order_num)+ order by timestamp_updated desc)来重复数据删除,然后select count(*)+ group by date, region)甚至与子查询一起做。但我想尽量避免子查询,这就是窗口函数(似乎)派上用场的地方,我对此一无所知

我能得到的最接近的东西是组,但它们每个都显示一个记录order_num。记录是正确的,但它们是重复的:

该查询 ^^ 显示:

日期 地区 数数
2021-09-01 穆里卡 1 认为这是第一个001
2021-09-01 穆里卡 1 这是第二个001
2021-09-01 尤罗普 2 认为这是第一个 Yurop:002
2021-09-01 尤罗普 2 认为这是第二个 Yurop:003
2021-09-02 尤罗普 1
0 投票
1 回答
51 浏览

mysql - 如何*有效地*获得*标准* SQL 中每组行的评分最高的行?

问题

我有两个 SQL 表albumsphotos. 专辑可以分层嵌套为树并使用嵌套集范例。照片是相册的孩子。

我需要一个 SQL 查询,它返回每个专辑 ID 的封面照片的 ID。封面照片应为相册所有递归子照片中评分最高的照片。

该解决方案必须适用于 PostgreSQL、MySQL 和 SQLite;即它应该基本上只使用标准SQL 特性,最多只使用所有DBMS 提供的非标准特性。

我知道已经提出了类似的问题(例如,在“选择每个 GROUP BY 组中的第一行?”),但我只能找到使用特定 DBMS 的 SQL 扩展的答案。

我已经有一种方法,但是速度太慢了。

环境

表格(albums简化):

photos(简化)

评分最高的照片被定义为最好加星标的照片,然后是最近的照片。

第一种方法:正确,但速度太慢

缓慢的部分是内部的单值查询,它为每个相册 ID 找到最佳子照片的 ID。

第二种方法:快速但不完整

一个错误但更快的查询是

这是错误的,因为它不会为每个相册返回一行,而是将每个相册映射到其所有递归子照片。尽管它返回了很多很多行,但它比第一个查询快了两个数量级。使用第二种方法,查询计划器可以使用其索引树来执行左连接。

讨论

根据经验,可以说:“首先排序,限制为 1,最后加入”比“首先加入(所有内容),最后排序”慢。如您所见,第二种方法错过了“限制为 1”的步骤。

所以我想知道是否可以使用基于第二种方法的东西,然后使用相同的album_id. 不幸的是,像

无效,因为没有聚合函数FIRST

有任何想法吗?

最后的评论:我知道 MySQL 允许SELECT-clause 中的列既不是分组函数也不是聚合函数。在这种情况下,MySQL 使用第一行的值,这正是我所需要的,但它是特定于 MySQL 的。使用 PostgreSQL,我可以使用DISTINCT ON (album_id)which 也会给出我想要的结果,但DISTINCT ON仅受 PostgreSQL 支持。

0 投票
1 回答
74 浏览

sql - 如何在postgresql中使用另一个条件过滤选定的查询

我有如下表

我需要通过 created_dttm desc 获取具有唯一 product_id 和 product_type_id 顺序的最后或最近记录。

所以我有以下查询,但由于 close_stock 参数> 0,它没有获取最后或最近输入的数据。

但我期待以下结果