2016-08-22 21 views
1

Ich habe zwei Termine lassen sagen 2-Mar-16 und 22-Aug-16 und ich möchte, dass wie oft Datum 25 in diesem Zeitraum auftritt. Wie könnte ich eine solche Abfrage erstellen?Wie komme ich an bestimmten Tag innerhalb einer Periode

+1

Der Schlüssel ist eine 'Gruppe von' zu machen, basierend auf der Spalte, die dieses Datum hat. Dann können Sie eine "Anzahl" von Vorkommen erhalten, die einen bestimmten Wert haben. Wenn Sie eine Gruppierung nach einer Datumsspalte machen, sollten Sie den Zeitteil entsprechend behandeln - dh, wie er ist, ODER für alle Datumsangaben in die gleiche Zeit (12.00.00) umwandeln. – ArunGeorge

+0

Es sind einzeilige Daten. ex: in 2-Mar16 bis 22-Aug-16 date 25 auftreten 5 mal –

+0

Anzeige Tabellenformat und Beispieldaten. –

Antwort

0

Verwenden Sie MONTHS_BETWEEN, um die Anzahl der vollen Monate zwischen den beiden Daten zu erhalten. Wenn der Wert wie in Ihrem Beispiel eine ganze Zahl ist, müssen Sie prüfen, ob das Datum im linken und rechten Datum 25 ist. Wenn ja, addieren Sie 1 zum Ergebnis.

Wenn die Daten unterschiedlich sind, dann müssen Sie die Etage MONTHS_BETWEEN berechnen und prüfen, ob zwischen dem linken und dem rechten Datum ein 25. ist. Zum Beispiel haben wir zwischen dem 23. März und dem 26. April eine 25, die durch die Suche im vollen Monat gefunden wurde, aber seit 23 < 26 müssen wir eins hinzufügen.

Bei dieser Antwort wird davon ausgegangen, dass Sie das frühere Datum als übrig gelassen haben. Wenn das nicht stimmt, dann müssen Sie wissen, dass das Ergebnis von MONTHS_BETWEEN negativ sein wird und Sie die hier beschriebenen Ideen entsprechend anpassen müssen.

1

Die folgende Abfrage gibt Ihnen die Anzahl der Vorkommen von 25 innerhalb eines Datumsbereichs. Logik habe ich inline geschrieben.

select substr(DAT,1,2) numbr,count (substr(DAT,1,2)) --- Filtering only day part of date and counting it 
from 
(
--Generating all the dates between 2 dates 
select to_date('02-Mar-2016','dd-mm-yyyy') + LEVEL DAT  
from dual 
connect by level < (select ABS (to_date('02-Mar-2016','dd-mm-yyyy') - to_date('22-Aug-2016','dd-mm-yyyy')) 
        from dual) 
) 
where substr(DAT,1,2) = 25 
group by substr(DAT,1,2); 
Verwandte Themen