2017-10-04 2 views
1

Hoffe, alles ist gut. Ich habe zwei Datensätze unten. Ich habe versucht, den neuesten Datensatz basierend auf dem Sold_DT zu ziehen, was mir den Rekord mit 7 in Item-Spalte geben würde.Max Funktion in 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 

Hier ist meine versucht Abfrage in Oracle:

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

Würde jemand zeigen Sie mir bitte auf die richtige Richtung, so dass ich nur die neueste Sold_DT zurückkehren können? Das ist nur dies:

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

Danke, Joe

+0

Ist Sold_DT wirklich eine Datumsspalte? –

+0

Sicherlich wäre das neueste Datum die Zeile 5? –

+0

ja. Es ist als Datumsspalte – joe

Antwort

1

Probieren Sie die MIN/MAX mit HALTEN. Wie mathguy herausfindet, wird es knifflig, wenn Sie zwei Läden für die letzten haben, und Sie fügen am besten einen Tiebreaker hinzu, wenn Sie einen einzigen konsistenten Datensatz wünschen, oder Sie verwenden eine andere Technik, wenn Sie alle Verbindungen haben wollen. mit

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

@ Gary, Danke für Ihr einzigartiges Feedback. Das funktioniert perfekt! Joe – joe

1

Sie können

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, Vielen Dank für Ihre Eingabe. Joe – joe

1

ich nicht sicher, ob zu diesem Zeitpunkt Wert mit Haupttabelle wie unten max verkauften Datum von Unterabfrage aufnehmen und war, wenn Sie nur eine Zeile gesucht, wenn es zwei sind das gleiche Datum und die gleiche Uhrzeit. Ich nahm an, dass du nur eins willst. Natürlich gibt es in diesem Fall sowieso nur eine Zeile mit maximalem Datum.

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

Danke, Bobby. Das funktioniert auch gut. – joe