2016-04-11 15 views
0

Wie finde ich die zwischen jedem Menüpunkt verstrichenen Tage wird aus diesem Satz von Daten bestellt:Wie Tage zwischen einem Auftrag verstrichene finden

account menuItem  beginDate  endDate 
'123'  'I1'   '2016-01-10' '2016-01-16' 
'145'  'I1'   '2016-03-11' '2016-03-26' 
'156'  'I2'   '2016-02-10' '2016-02-26' 

Ich habe diese Abfrage so weit:

Select menuItem, Datediff(day, beginDay, endDay) DaysOrdered 
From MealCheckout 
Group By menuItem 
Order By beginDate, endDate 

So sollte die Ausgabe beispielsweise für menuItem I1 sein es gibt zwei Datensätze. Also sollte das Startdatum des ersten Datensatzes, der '2016-01-10' ist, und das Enddatum des letzten Auftretens eines I1 Datensatzes sein, der der zweite Datensatz ist, und den endDate von diesem letzten Datensatz, der '2016-03-26' ist, subtrahieren und startDate und endDate finden die verstrichene Zeit. Die obige Abfrage funktioniert nicht, sie gibt keinen Wert aus.

Antwort

1

Sie können nur Daten in Oracle subtrahieren, um die verstrichenen Tage zu erhalten. Also:

Select menuItem, max(endDay) - min(beginDay) DaysOrdered 
From MealCheckout 
Group By menuItem; 

Ihre Abfrage sollte einen Fehler in Oracle zurückgeben; Es gibt keine datediff() Funktion.

+0

Vielen Dank das war die richtige Abfrage! Mir war nicht bewusst, dass es keine datediff() - Funktion gibt. – CapturedTree

1
select menuItem, 
    max(to_date(endDay,'YYYY-MM-DD'))-min(to_date(beginDay,'YYYY-MM-DD')) 
    From MealCheckout 
    Group By menuItem; 
Verwandte Themen