sql从表中每个日期获取一条记录

时间:2017-12-07 11:43:27

标签: sql postgresql greatest-n-per-group

我有一张表:

o_id  order_no   date        etc....
 4     1         2017-02-01
 4     2         2017-02-01
 4     3         2017-02-01

我想要的只是每个日期应该获取一个(最高顺序号)记录。 例如,只有order_no 3才能获取o_id 4

输出:

o_id       order_no      date
4          3             2017-02-01
2          1             .........so on

2 个答案:

答案 0 :(得分:0)

规范方法是使用ANSI标准ROW_NUMBER()函数:

select t.*
from (select t.*,
             row_number() over (partition by o_id order by order_no desc) as seqnum
      from t
     ) t
where seqnum = 1;

答案 1 :(得分:0)

如果GROUP BY在每个MAX组中唯一{/ 1}},您可以使用order_noo_id

select your_table.*
from your_table
join
(
  select o_id, max(order_no) maxorder
  from your_table
  group by o_id
) t on t.o_id = your_table.oid and t.maxorder = your_table.order_no

类似问题

Select corresponding to row from the same table - 您可以找到group by和window function version的性能比较,但是,比较是针对SQL Server的。