在做清楚的同时保持秩序

时间:2016-05-05 07:07:35

标签: sql postgresql

在Postgres中,给出以下数据:

-[ RECORD 1 ]-
id     | 57425
filter | 1
-[ RECORD 2 ]-
id     | 57416
filter | 1
-[ RECORD 3 ]-
id     | 57426
filter | 1
-[ RECORD 4 ]-
id     | 57416
filter | 2
-[ RECORD 5 ]-
id     | 57424
filter | 2
-[ RECORD 6 ]-
id     | 57425
filter | 2
-[ RECORD 7 ]-
id     | 57427
filter | 2

创建以下内容的SQL是什么(删除重复的内容)。我不在乎它是否完全相同的订单,我只想要具有过滤值的记录' 1'出现在具有过滤值' 2'。

的记录之前
-[ RECORD 1 ]-
id     | 57425
filter | 1
-[ RECORD 2 ]-
id     | 57416
filter | 1
-[ RECORD 3 ]-
id     | 57426
filter | 1
-[ RECORD 4 ]-
id     | 57424
filter | 2
-[ RECORD 5 ]-
id     | 57427
filter | 2

2 个答案:

答案 0 :(得分:2)

正如我在评论中所建议的那样,这似乎是一个简单的分组/排序问题:

" x \" " + x + " except"

一旦你发现自己在说"我想在某些列 ..."或者"我想做不同的,但也包括额外的列",您应该意识到您实际上正在寻找的不是SELECT id,MIN(filter) as lowFilter FROM UnnamedTable GROUP BY id ORDER BY lowFilter 而是{{ {1}}。然后,您可以正确地制定要应用于其他列的聚合,考虑到可能有多个值(来自多行)可供选择。

答案 1 :(得分:0)

Select ID, min(filter) from my_table group by id order by 2

或者

Select distinct t1.id, (select min(filter) from my_table t2 where t2.id = t1.ID) from my_table t1 order by 2