2016-07-01 12 views
1

Ich habe zwei Tabellen, eine hat zwei Spalten, die Daten haben. Der andere hat eine Spalte mit Daten und eine andere mit numerischen Daten. Ich möchte den Durchschnitt der numerischen Spaltenwerte der zweiten Tabelle hinzufügen, deren Datumsspalte zwischen den Werten der beiden Datumsspalten in der ersten Tabelle liegt. Etwas wie folgt aus:Sql Query Join Durchschnitt einer Spalte, wo eine andere Spalte zwischen zwei Spalten ist Werte einer anderen Tabelle

Tabelle 1:

Date1  Date2 
6/28 2:00 6/30 4:00 
7/1 4:00 7/4 7:00 
... 

Table2:

Date3 Value 
6/29 1:00 6.5 
6/30 3:00 2.5 
7/1 5:00 3.0 
7/3 9:00 5.0 
... 

FinalTable:

Date1  Date2 AvgValue 
6/28 2:00 6/30 4:00 4.5 
7/1 4:00 7/4 7:00 4.0 

Antwort

0

Sie können das between Operator in Ihrem Joinbedingung:

SELECT date1, date2, AVG(value) 
FROM  table1 
JOIN  table2 ON date3 BETWEEN date1 AND date2 
GROUP BY date1, date2 
+1

Danke Mureinik, das ist die richtige Antwort. Obwohl meine letzte Frage mehr hat als das, funktioniert das! – bjbreitling

0
SELECT date1, date2, AVG(value) 
FROM  table1 t1 
JOIN  table2 t2 ON t3.date3 >= t1.date1 AND t3.date3 < t1.date2 
GROUP BY t1.date1, t1.date2 

ODER

SELECT date1, date2, AVG(value) 
FROM  table1 t1 
JOIN  table2 t2 ON t3.date3 > t1.date1 AND t3.date3 <= t1.date2 
GROUP BY t1.date1, t1.date2 

BETWEEN Verwendung ist groß, aber es ist von beiden Seiten des Bereichs inklusive. Wenn Sie also überlappende Bereiche in Ihrer Doppeldatumstabelle haben, z. 6/28 2:00 to 6/28:4:00 AND 6/28:4:00 to 6/28 6:00 dann würde jeder Wert, der um 16 Uhr landet, wiederholt werden und Ihren Durchschnitt verfälschen.

Sie können dies auf eine von zwei Arten beheben.

  • Stellen Sie sicher, Ihre BETWEEN keine Überlappung verursacht 6/28 2:00 to 6/28 3:59:59.997
  • nicht BETWEEN verwenden und schreiben die größer/gleich oder kleiner ist als nur oberhalb von 1 Seite des Bereichs wie in den Beispielen integrativ sein .

Hinweis für DATETIME für SQL-Server 3 Millisekunden genau so, wenn Sie in 3 gesetzt: 59: 59.999 oder 0,998 wird es die gleichen wie 4 behandelt werden: 00: 00.000, ist der Weg zu lösen Nutzung .997.

Verwandte Themen