2013-03-04 99 views
0

我有如下數據:的Oracle SQL最後取消記錄

訂購

order_id order_name  order_date   order_status 

1   iphone  20130102 13:20:00  cancelled 
1   blackberry 20130102 13:00:00  cancelled 
1   ipad   20130102 13:00:00  cancelled 

person_id  person_name  order_id 

1    harshini   1 

我想找回我的查詢基於order_date的20130102 13之間的數據如下: 00:00至2013年13:20:00。這意味着最後一次取消訂單。

person_name  order_name order_date  

harshini  blackberry 20130102 13:00:00 
+3

它們都具有相同的訂單ID相同的訂購日期,您選擇黑莓而不是ipad的基礎是什麼。 ? – Techmonk 2013-03-04 12:52:16

+4

不是答案,但你確定你的數據模型?在這種模式下,一個人只能有一個訂單,而一個訂單可以有幾個人與之相關...? – 2013-03-04 12:53:17

+0

@Joachim:人可以訂購多種產品。 – user2127414 2013-03-04 20:30:46

回答

0

只是嘗試這個...
select p.person_name ,o.order_name,o.order_status from order_1 o,person p where orderdate=(select max(orderdate) from order_1)

0
select person_name, order_name, order_date 
from(
    select 
    o.order_id, o.order_name, o.order_date, o.order_status, 
    p.person_id, p.person_name, p.order_id, 
    row_number() over (/*partition by person_id*/ order by order_date desc) as rnk 
    from order o join person p on (o.order_id = p.order_id) 
    where o.order_status = 'canceled' 
    and o.order_date between 
     to_date('20130102 13:00:00','yyyymmdd hh24:mi:ss') and 
     to_date('20130102 13:00:00','yyyymmdd hh24:mi:ss') 
) 
where rnk = 1; 

但看到的評論,你在你的設計中的一些問題。

+0

如果我在13:00:00到13:20:00之間查詢,我想檢索記錄隔離莓。它意味着最後訂單記錄 – user2127414 2013-03-04 17:51:12

+0

訂購Iphone是在您的日期之間。 – 2013-03-04 17:53:21

+0

實際上我想顯示上次取消的記錄,即第二個(黑色漿果) – user2127414 2013-03-04 19:19:05