我需要一些对子查询的帮助。我想在第一列中按分组,然后在第二列上进行子组和排序,选择MIN,在第三列上排序,然后从第四列中选择与MIN关联的值。
像这样的东西
| subject | id | num | code |
|---------|----|-----|------|
| 2 | 34 | 45 | 1234 |
| 2 | 34 | 3 | 1267 |
| 3 | 23 | 32 | 2345 |
| 3 | 23 | 16 | 4568 |
| 3 | 30 | 12 | 5678 |
| 5 | 29 | 53 | 2354 |
| subject | id | num | code |
|---------|----|-----|------|
| 2 | 34 | 3 | 1267 |
| 3 | 23 | 16 | 4568 |
| 5 | 29 | 53 | 2345 |
发布于 2017-10-08 06:46:06
一种可能的方法是使用LATERAL subquery和ORDER BY xxx LIMIT 1
现场演示:http://sqlfiddle.com/#!17/71480/6
SELECT y.*
FROM (
SELECT distinct subject
FROM table1
) x,
LATERAL (
SELECT * FROM table1 t
WHERE t.subject = x.subject
ORDER BY id, num
LIMIT 1
) y
order by 1
| subject | id | num | code |
|---------|----|-----|------|
| 2 | 34 | 3 | 1267 |
| 3 | 23 | 16 | 4568 |
| 5 | 29 | 53 | 2354 |
发布于 2017-10-08 10:41:14
查找具有最小(最大)值的行相当于查找不存在具有较低(较高)值的行:
SELECT *
FROM ztable zt
WHERE NOT EXISTS(
SELECT * FROM ztable nx
WHERE nx.subject = zt.subject
AND nx.num < zt.num
AND nx.id < zt.id
);
https://stackoverflow.com/questions/46627714
复制相似问题