在oracle中选择最大日期

时间:2017-11-10 18:34:59

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

我的表包含order_id,status和update_date。状态可能是成功或失败。每个订单可以多次具有这些状态,具有不同的更新日期,除了“成功”和“成功”。状态如下。

order_id status  update_date
1001    failure 01-01-2015
1001    failure 02-01-2015
1001    success 03-01-2015
1001    failure 04-01-2015
1002    failure 02-01-2015
1002    failure 03-01-2015

我需要选择具有最新更新日期的每个订单ID及其各自的状态,如果订单具有成功状态,则其各自的更新日期如下

1001 success 03-01-2015
1002 failure 03-01-2015

请帮忙解决这个问题。感谢

1 个答案:

答案 0 :(得分:2)

试试这个:

SELECT order_id,
  status,
  update_date
FROM(SELECT order_id,
            status,
            update_date,
            ROW_NUMBER() over (partition BY order_id order by DECODE(status,'success',1,0) DESC,update_date DESC) rn
      FROM test1)
WHERE rn=1;

P.S:test1是我的表名和你的数据。