Postgresql对订单的区别

时间:2015-12-10 16:41:45

标签: postgresql

我的数据如下表所示。

   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

我试图编写一个表达式,对symbolvalue进行排序,然后在dateid上进行排序。根据我的理解,这是不可能的,因为不同的需要与我订购的相匹配。

我想要的是获得上面的表,但没有第4行,因为它将按symbolvalue升序排序,然后区分并选择该排序表中的第一行。有没有办法实现这个目标?

1 个答案:

答案 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}行}。

Demo here