2016-12-27 4 views
0

Ich bin ein Anfänger bei Oracle SQL und ich möchte zwei Fragen haben.Finden Sie die Anzahl der Tage zwischen zwei varchar Daten in Oracle SQL

Zuerst möchte ich die Anzahl der Tage zwischen zwei Ereignissen finden (also wenn sie ein Ja sind). Diese beiden Daten sind derzeit varchars (!).

Pseudocode: Wenn die Anfrage ja ist und der Verkauf ja ist, subtrahiere sales_date von request_date.

Daten sieht wie folgt aus:

Id request request_date sales   sales_date 
1 yes  2 feb14   yes    3 feb 14 
2 yes  3 feb 14  no    3 feb 14 
3 no  4 feb 14  no    5 feb 14 
4 no  4 feb 14  yes    6 feb 14 

Und idealerweise ich dies das Ergebnis sein wollen:

Id request request_date sales sales_date days_between_request_sales 
1 yes 2 feb14   yes  3 feb 14   1 

Meine zweite Frage ist, dass, wenn ich all diese Ergebnisse haben, dann wie kann ich der Durchschnitt aller Daten?

+0

Was meinst du mit Durchschnitt von Daten? In Ihrem Beispiel (selbst wenn Sie nicht nur Zeilen mit "Ja" betrachten), was sollte der Durchschnitt sein? – Aleksej

+0

Danke für Ihre Frage. Mit Mittelwert meinte ich, dass ich alle days_between_request_sales days (also wo nur request und sales ja ja waren) summieren und diese durch die Anzahl der Vorkommen dividieren soll. Dies würde zu einer Nummer führen. Wenn es noch unklar ist, lass es mich wissen. – Veraaa

Antwort

0

können Sie versuchen, mit:

select trunc(to_date(sales_date,'dd-mm-yy') - to_date(request_date, 'dd-mm-yy')) as days 
from <yourtable> 
where sales = 'yes' 
and request = 'yes' 

Demo:

select trunc(to_date('3 feb 14','dd-mm-yy') - to_date('1 feb 14', 'dd-mm-yy')) as days 
from dual 

Ausgang:

DAYS 
---------- 
    2 

Durchschnitt:

select avg(trunc(to_date(sales_date,'dd-mm-yy') - to_date(request_date, 'dd-mm-yy'))) as Average 
    from <yourtable> 
    where sales = 'yes' 
    and request = 'yes' 
+0

Vielen Dank! Wenn ich dies auf meinem Dataset versuche, bekomme ich den Fehler: "Literal stimmt nicht mit Formatzeichenkette überein". Könnte es möglich sein, dass ich etwas mit dem Datum ändern muss? – Veraaa

+0

Ich habe Ihre Daten verwendet und Ihnen eine Demo gezeigt. Allerdings kann es vom ersten Datensatz an zu Problemen führen. '2 Feb14'. Ich denke, es sollte ein Leerzeichen zwischen Monat und Jahr sein "12. Februar 14". Versuch das. Versuchen Sie auch, wenn die Demo mit Ihnen arbeitet – XING

+0

Auch Ihre zweite Frage ist nicht ziemlich klar, so dass ich keine Antwort posten. Fügen Sie ein Beispiel für das, was Sie wollen Durchschnitt – XING

0

Angenommen, Sie haben eine Tabelle wie folgt aus:

create table yourTable(Id, request, request_date, sales, sales_date) as ( 
    select 1 ,'yes',  '2 feb 14',  'yes' ,   '3 feb 14' from dual union all 
    select 2 ,'yes',  '3 feb 14',  'no' ,   '3 feb 14' from dual union all 
    select 3 ,'no' ,  '4 feb 14',  'no' ,   '5 feb 14' from dual union all 
    select 4 ,'no' ,  '4 feb 14',  'no' ,   '6 feb 14' from dual 
) 

Unter der Annahme, dass die Saiten Daten immer im Format Sie zeigte darstellen, können Sie verwenden:

select Id, request, request_date, sales, sales_date, 
     to_date(sales_date, 'dd mon rr') - to_date(request_date, 'dd mon rr') as days_between_request_sales 
from yourTable 
where sales = 'yes' 
    and request = 'yes' 

den Durchschnitt dieser resultierenden Zahlen od Tage zu berechnen

select avg (to_date(sales_date, 'dd mon rr') - to_date(request_date, 'dd mon rr')) as average 
from yourTable 
where sales = 'yes' 
and request = 'yes' 
+0

Ein Grund für den Downvote? Etwas stimmt nicht? – Aleksej

+0

Sie haben andere Posts kommentiert, auf die OP nicht geachtet hat, aber haben Sie sich wirklich die OP-Frage angeschaut. Ihre Anfrage wird nicht geben, was Op wollen. 'Anfrage ist ja und Verkauf ist ja, subtrahiere Umsatz_Datum von Anfrage_Datum.' ... deine Abfrage wird niemals das Ergebnis produzieren, das Op wollen, .Hinzu einem Downvote – XING

0

ich nicht verstanden, wie es mit dem vorherigen to_date gearbeitet (sales_date, 'dd-mm-yyyy') ist völlig falsch, wie Ihr Format mon yy dd ist:, Sie einfach die AVG verwenden können Also was Aleksej vorgeschlagen hat, ist korrekt to_date (Verkaufsdatum, 'dd monrr') ist absolut richtig. Möglicherweise hat er eine Bedingung verpasst = 'Ja'.

Verwandte Themen