如何使用 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;
这可能是在 Postgres 上编写查询的最有效方式。请注意 DISTINCT ON
语法在 ON
子句中不支持多列。假设 id
将唯一标识每个组(即 id
始终是唯一的),上述逻辑恰好在这里起作用。如果不是,那么我们可能不得不求助于使用 ROW_NUMBER
并在 id
和 name.
上进行分区
看来你只需要 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
我有这样的日期数据
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;
这可能是在 Postgres 上编写查询的最有效方式。请注意 DISTINCT ON
语法在 ON
子句中不支持多列。假设 id
将唯一标识每个组(即 id
始终是唯一的),上述逻辑恰好在这里起作用。如果不是,那么我们可能不得不求助于使用 ROW_NUMBER
并在 id
和 name.
看来你只需要 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