SQL分组依据:选择另一列具有其最小值/最大值的值

安迪

我想按一列分组,获取第二列的最小值和最大值,并且(这是棘手的部分!)从第三列获取值,其中第二列在组中具有其最小值。

例:

MyTable:

ID     TS     GRP
==================
 1     20      A
 2     20      B
 3     10      A
 4     30      A
 5     10      B
 6     40      A

所需的结果(ID应该是TS最小的记录中的值):

ID    MIN_TS   MAX_TS   GRP
============================
 3      10       40      A
 5      10       20      B

通常,分组查询非常简单:

SELECT <???> AS ID, MIN(TS) AS MIN_TS, MAX(TS) AS MAX_TS, GRP
FROM MyTable
GROUP BY GRP

但是ID部分呢?不能通过这种方式进行分组,对吗?但为什么?最好的解决方法是什么?

马库斯克

在子查询中进行汇总,然后在另一个子查询中查找每个组的ID:

SELECT
  (SELECT TOP(1) id FROM MyTable WHERE grp = agg.grp ORDER BY ts DESC) AS id,
  min_ts, max_ts, grp
FROM (SELECT min(ts) AS min_ts, max(ts) AS max_ts, grp
      FROM MyTable
      GROUP BY grp) agg

或使用窗口功能:

SELECT id, min_ts, max_ts, grp
FROM (SELECT 
        id,
        min(ts) OVER (PARTITION BY grp) min_ts,
        max(ts) OVER (PARTITION BY grp) max_ts,
        grp,
        row_number OVER (PARTITION BY grp ORDER BY ts) rn
      FROM MyTable)
WHERE rn = 1;

此查询使用窗口函数来计算min_ts,并max_ts为每个组,然后过滤,以仅包括用于每个组(由有序的第一行ts)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

选择一列的最小值,另一列的最大值以及与最大值相关的字段

从一列中选择最小值(日期),最大值(日期)并按天分组-SQL

用另一列选择最大值/最小值

熊猫,从一列中选择最大值,从另一列中选择最小值

从另一列的最大值中检索一列的最小值

从一列定义的组中选择最小值/最大值作为另一列的子组-SQL,HPVertica

SQL-如何选择具有最大值的列的行(+分组依据)

如何用一列的最大值与另一列的最小值之间的差异将一列中的df按Python分组?

在与另一列对应的列中找到最大值和最小值

使用Spark将一列的连续相同值分组,并为每组取另一列的最大值或最小值

获取具有最小值的行的ID,并按另一列分组

以另一列的最小值/最大值作为条件作为 SUM 进行测量

根据另一列中的字符保留最小值或最大值

当另一列具有匹配值时,选择一列中具有最大值的行

在单个查询中从SQL的同一列中选择最大值和最小值

我需要分组并覆盖具有最小值-最大值的列

具有分组依据的最大值的 SQL 总和

SQL:对于每个ID,仅显示另一列中的最大值(不能分组依据)

如何选择*并按一列分组,同时选择另一列的最大值?

如何找出一列相对于另一列的最大值和最小值的总和

pandas groupby,您将获得一列的最大值和另一列的最小值

根据数组的另一列在一列中聚合最小值最大值-Python

SQL获取具有单行的数据集中列的最小值和最大值

如何从表中找到最大值和最小值以及另一列值?

获取一列的值,其中一列为最大值,另一列为最小值

Linq获取具有列最小值但基于另一列值的行

查询优化:选择结果集的最小值,其中一列是另一组的最大值

选择 col 值,其中另一个 col 是最大值或最小值

如何创建具有不同值的新表,但从另一列中选择最大值