2017-10-04 39 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