我的数据如下表所示。
date value symbol time id
0 2014-01-01 0 A 2014-01-01 65
1 2014-01-02 1 B 2014-01-02 66
2 2014-01-03 2 A 2014-01-03 65
3 2014-01-04 3 B 2014-01-04 66
4 2014-01-05 5 A 2014-01-05 65
5 2014-01-05 4 A 2014-01-05 65
6 2014-01-06 6 B 2014-01-06 66
我试图编写一个表达式,对symbol
和value
进行排序,然后在date
和id
上进行排序。根据我的理解,这是不可能的,因为不同的需要与我订购的相匹配。
我想要的是获得上面的表,但没有第4行,因为它将按symbol
和value
升序排序,然后区分并选择该排序表中的第一行。有没有办法实现这个目标?
答案 0 :(得分:1)
DISTINCT ON
通过选择ORDER BY
子句中其他字段定义的 first 行来消除重复行:
SELECT DISTINCT ON ("date", "id")
"pk", "date", "value", "symbol", "time", "id"
FROM mytable
ORDER BY "date", "id", "value", "symbol"
上述查询将为每个"date", "id"
切片选择第一个行,该行按照该切片中"value", "symbol"
的顺序定义,因此它将排除{{1}行}。