在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
答案 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