问题标签 [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.
postgresql - Grafana PostgreSQL 与时间序列不同 on()
我对 Grafana 和 Postgres 很陌生,可以在这方面使用一些帮助。我在 PostgreSQL 中有一个带有温度预测的数据集。dump_date
同一参考日期在全天的不同时间点(用 表示)发布多项预测。假设:今天 06:00 和今天 12:00 发布明天的预报(时间用 表示start_time
)。现在我想使用 Grafana 将温度预测可视化为时间序列。但是,我只想可视化最新发布的预测(12:00),而不是两个预测。我以为我会使用 DISTINCT ON() 仅从该数据集中选择最新发布的预测,但不知何故,对于 Grafana,这没有响应。我在 Grafana 中的代码如下:
但是,这不起作用,因为我收到消息:'AS 处或附近的语法错误'。我应该怎么办?
sql - 如何获取每个月的第一行数据(postgres)
我是 postgres 的初学者,想获得每个月的第一行(分组),但我不确定如何。
我的表order
如下:
预期结果应如下:
但是我无法使用下面的查询获得上述结果,其中我得到的结果与表相同:
mysql - Mysql仅更新第一个唯一匹配
我有一个表,其中多次出现的值(SKU)与另一列(column2)的某个值相关联。我想用 SKU 的第一个匹配更新 column2 的值。
更新表集 column2 = test where sku = 18。
我的 sku 值是 18 的两倍,但只想在第一次出现 sku = 18 时更新 column2。
如何
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 的答案和评论充其量是模糊的。
sql - 如何在 Laravel Eloquent 中使用 DISTINCT ON
这是我的完整 SQL 语句:
我正在尝试将此语句转换为 Laravel Eloquent 代码:
- 我读过 eloquent 不知何故不支持 DISTINCT ON 所以我不能简单地做
distinctOn('group_id')
- 如果是这种情况,有没有办法修改函数内部的选择以使用 DISTINCT ON?
sql - 如何在嵌套的 SELECT 查询 Postgresql 中聚合多行
我对复杂的 SQL 请求很陌生...
我想要实现的是在传单地图页面上显示活动天气警报的地图。
首先使用来自国家气象机构的 RSS 提要填充 Postgis 表,然后通过选择过期日期晚于实际日期的 ROW 并通过 Geoserver WFS 服务发布此视图来创建视图。
看起来不错,只是每个地理区域都添加了多个事件有效过期功能,从而导致了一种仅显示顶部事件的多层。
我遇到的问题是,对于每个区域/多边形,我都有多条线用于我必须整理的杂项事件/日期。
初始表的结构如下:
我试图解决这个烂摊子的方法是:首先为每个事件创建一个视图,以便每个位置只有“此类事件”的最新过期警报:
我对每个我感兴趣的事件都这样做了。
其次,我为每个区域创建了一个聚合视图,其中包含相关事件类型的内容:
所有这些东西都可以完成这项工作,但看起来更像是一把锤子来杀死一只苍蝇。
我确信有一种方法可以通过嵌套 SELECT 在一次运行中实现这一点,但绝对无法弄清楚如何:-(
欢迎任何建议,感谢您的帮助。
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 |
mysql - 如何*有效地*获得*标准* SQL 中每组行的评分最高的行?
问题
我有两个 SQL 表albums
和photos
. 专辑可以分层嵌套为树并使用嵌套集范例。照片是相册的孩子。
我需要一个 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 支持。
sql - 如何在postgresql中使用另一个条件过滤选定的查询
我有如下表
我需要通过 created_dttm desc 获取具有唯一 product_id 和 product_type_id 顺序的最后或最近记录。
所以我有以下查询,但由于 close_stock 参数> 0,它没有获取最后或最近输入的数据。
但我期待以下结果