2016-09-09 1 views
0

Ich habe eine Tabelle, die Transaktionen erfasst von unserem Web-Service gesendet. Ich möchte außerhalb der Sequenz Nummern zwischen einer Nummer und der letzten Nummer in der Tabelle für diesen Tag erhalten.Out-of-Sequence-Nummern für heute

Dies ist eine vereinfachte Struktur: Tabellenname CARTREQUESTS

CR_ID 
CR_DATE 
CR_ORDER_ID 
CR_CUSTOMERID 

dh

CR_ID CR_DATE     CR_ORDER_ID CR_CUSTOMERID 
1540668 9/9/2016 11:59:52 AM 100148466 1087840 
1540667 9/9/2016 11:58:49 AM 100148465 1191293 
1540687 9/9/2016 12:23:07 PM 100148464 916470 
1540647 9/9/2016 11:46:32 AM 100148463 918195 
1540629 9/9/2016 11:45:08 AM 100148462 957676 
1540628 9/9/2016 11:44:28 AM 100148461 1161585 
1540627 9/9/2016 11:43:48 AM 100148460 956791 
1540607 9/9/2016 11:40:47 AM 100148459 1161585 
1540567 9/9/2016 11:36:07 AM 100148457 1127193 
1540548 9/9/2016 11:30:42 AM 100148456 1204204 
1540547 9/9/2016 11:29:11 AM 100148455 967946 
1540527 9/9/2016 11:27:25 AM 100148454 1209116 
1540507 9/9/2016 11:21:54 AM 100148453 1207376 
1540488 9/9/2016 11:18:17 AM 100148452 1057770 
1540467 9/9/2016 11:02:16 AM 100148450 1216001 
1540448 9/9/2016 11:00:51 AM 100148449 1082302 
1540447 9/9/2016 11:00:39 AM 100148448 1082298 
1540427 9/9/2016 10:58:10 AM 100148447 951007 
1540407 9/9/2016 10:56:10 AM 100148446 1209338 
1540387 9/9/2016 10:51:08 AM 100148445 1205880 
1540367 9/9/2016 10:39:12 AM 100148444 1061172 
1540347 9/9/2016 10:34:37 AM 100148443 1215973 

ich wissen muss, wie ich einen CR_ORDERID Wert von 100.148.443 und die Abfrage zurückgeben diese 2 order # eingeben s 100148458, 100148451

Es sind CR_ORDERID Werte größer als 100148466 zu diesem Zeitpunkt, ich will nur proce ssed records für SYSDATE-1

Antwort

0

Abschlussarbeitscode:

select minid+(level-1) missingorders from (
    select max(cr_order_id) maxid, min(cr_order_id) minid 
    from CARTREQUESTS 
    WHERE cr_date >= sysdate - 1 
    and cr_order_id >= :orderid 
) 
connect by level <= maxid-minid+1 
minus 
select cr_order_id from CARTREQUESTS 
WHERE cr_date >= sysdate - 1 
0

Die von Ihnen referenzierten Werte existieren nicht in Ihrer Liste, also nehme ich an, dass Sie nach Aufträgen suchen, die für gestern nicht existieren. Wenn ja, versuchen Sie dies:

start_order := 100148443; 
select max(cr_order_id) into end_order from cartrequests where cr_order_id >= start_order and cr_date between trunc(sysdate) - 1 and trunc(sysdate); 
for i in start_order..end_order loop 
    select count(*) into ocount from cartrequests where cr_order_id = i and cr_date between trunc(sysdate)-1 and trunc(sysdate) 
    if ocount = 0 then 
    dbms.output.put_line (i); 
    end if; 
end loop; 
+0

Natürlich sind sie nicht in der Liste vorhanden ist, das ist, was ich den Code erwartet zurück, weil sie in der richtigen Reihenfolge sind . Dieser Code führt zu einer ungültigen SQL-Anweisung. – MB34