Oracle SQL:在条件之后按日期顺序返回先前的n行

时间:2018-04-13 22:22:08

标签: sql oracle sql-order-by

我需要在按日期排序的一组数据的条件之后返回前三行。请参阅下面的查询以及一些数据:

  

选择发票,cli_id,sale_date,已处理   来自销售   其中cli_id =' 490727'   按sale_date订购

  • INVOICE CLI_ID SALE_DATE PROCESSED
  • 7995781 490727 04/07/2018 15:30:36 W
  • 7995782 490727 04/07/2018 15:30:39 Q
  • 7995783 490727 04/07/2018 15:30:41 Q
  • 7995784 490727 04/07/2018 15:30:43 Q
  • 7995792 490727 04/07/2018 15:31:01 W ====>
  • 7995793 490727 04/07/2018 15:31:03 Q
  • 7995794 490727 04/07/2018 15:31:06 Q
  • 7995795 490727 04/07/2018 15:31:08 Q

我需要在某些条件之前返回之前的3行==>加工=' W' 例如:想知道前三行的PROCESSED =' W'发票是7995792.它将返回: 7995793,7995794和7995795

1 个答案:

答案 0 :(得分:1)

在Oracle 12C中,您可以使用:

vectortestInner

在早期版本中,您需要一个子查询:

select s.*
from sales s
where s.sale_date < (select s2.sale_date
                     from sales s2
                     where s2.cli_id = s.cli_id and s2.processed = 'W'
                    ) and
      s.cli_id = 490727
order by s.sale_date desc
fetch first 3 rows only;