2017-10-04 76 views
1

希望一切都很好。下面有兩條記錄。我試圖從Sold_DT中提取最新的記錄,這會在項目列中給我7個記錄。Oracle 12中的最大功能

Store  Sold_DT      Item 
CVS    1/22/2017 12:05:00 AM   5 
CVS_S_Eleven 1/22/2017 10:41:00 AM   7 

下面是Oracle我試圖查詢:

select 
store, 
max(sold_dt) as max_dt, 
item 
from temp 
group by store, item 

會有人請點我到正確的方向,使我只能返回最新Sold_DT?這僅僅是這樣的:

Store  Sold_DT         Item 
    CVS_S_Eleven 1/22/2017 10:41:00 AM   7 

謝謝,喬

+0

是Sold_DT真的是日期欄? –

+0

當然最新的日期將是第5行? –

+0

是的。它是作爲日期列的 – joe

回答

1

跟上嘗試MIN/MAX。正如數學家指出的,如果你有兩個商店並列最近,它會變得棘手,如果你想要一個一致的記錄,你最好添加一個tiebreaker,或者如果你想要所有關係,就使用另一種技術。

select 
    max(store) keep (DENSE_RANK FIRST ORDER BY sold_dt desc) max_store, 
    max(sold_dt) as max_dt, 
    max(item) keep (DENSE_RANK FIRST ORDER BY sold_dt desc) max_item 
from temp 
+0

@加里,感謝您的獨特反饋。這完美的作品! Joe – joe

1

你可以採取出售日期的最大子查詢從像下面並與主表連接在該日期值

select t1.* from 
    from temp t1 join (select 
    max(sold_dt) as max_dt, item 
    from temp) t2 on t1.Max_dt=t2sold_dt 
+0

@ Rams,非常感謝您的意見。 Joe – joe

1

我不知道,如果你只想要一個行,如果有兩個與相同的日期和時間。我認爲你只需要一個。當然,在這種情況下,無論如何只有一行最大日期。

SQL> 
SQL> drop table temp; 

Table dropped. 

SQL> 
SQL> create table temp 
    2 (
    3 Store varchar2(12), 
    4 Sold_DT date, 
    5 Item number 
    6 ); 

Table created. 

SQL> 
SQL> insert into temp values ('CVS',to_date('01/22/2017 12:05:00 AM','MM/DD/YYYY HH:MI:SS AM'),5); 

1 row created. 

SQL> insert into temp values ('CVS_S_Eleven',to_date('01/22/2017 10:41:00 AM','MM/DD/YYYY HH:MI:SS AM'),7); 

1 row created. 

SQL> 
SQL> commit; 

Commit complete. 

SQL> 
SQL> select 
    2 store, 
    3 Sold_DT, 
    4 item 
    5 from temp 
    6 where 
    7 Sold_DT = (select max(Sold_DT) from temp) and 
    8 rownum < 2; 

STORE  SOLD_DT   ITEM            
------------ --------- ----------            
CVS_S_Eleven 22-JAN-17   7            

SQL> 
SQL> spool off 
+0

謝謝,鮑比。這工作也很好。 – joe