如何使用 distinct 或 group max sql 进行分组

How to grouping with distinct or group max sql

我有这样的日期数据

id      name period difference 
6172    A      6      10 
6172    A      3      10 
10099   AB     12     24 
10099   AB     6      24 
10099   AB     3      24 
10052   ABC    12     26 
10052   ABC    6      26 
10052   ABC    3      26 
9014    ABCD   12     21 
9014    ABCD   6      21 
9014    ABCD   3      21

如何得到这样的结果

id      name    period  difference
6172    A         6      10
10099   AB        12     24
10052   ABC       12     26
9014    ABCD      12     4

我尝试在 (id) 上使用 distinct,但结果是这样的

id     name    period   difference
6172    A         6      10
10099   AB        6      24
10052   ABC       6      26
9014    ABCD      6      4

使用max()

select id, name, t2.period, difference from tableA t1
inner join 
 (select id, max(period) as period from tableA
 group by id) t2 on t2.id = t1.id

使用distinct()

select distinct id, name, t2.period, difference from tableA 

您想要的查询类似于:

SELECT DISTINCT ON (id) *
FROM Data
ORDER BY id, period DESC;

Demo

这可能是在 Postgres 上编写查询的最有效方式。请注意 DISTINCT ON 语法在 ON 子句中不支持多列。假设 id 将唯一标识每个组(即 id 始终是唯一的),上述逻辑恰好在这里起作用。如果不是,那么我们可能不得不求助于使用 ROW_NUMBER 并在 idname.

上进行分区

看来你只需要 max()

select id,name,max(period),max(difference)
from table group by id,name

虽然我没有在你的示例数据中发现 difference=4 但你在输出中使用了它,所以我猜是你的错字

使用max()

select id, name, max(period), difference from tablename
group by id, name,difference 

你可以试试我的代码:

SELECT
  id, name, max(period), difference
FROM 
  data_table
group by id, name,difference
order by name

这是一个演示 link http://sqlfiddle.com/#!17/9ab8d/2