2016-07-01 3 views
1

두 개의 테이블이 있고 한 개의 열에 날짜가 있습니다. 다른 하나는 날짜가있는 열과 숫자 데이터가있는 열이 있습니다. 첫 번째 테이블의 두 날짜 열 값 사이에 날짜 열이있는 두 번째 테이블의 숫자 열 값의 평균을 조인하고 싶습니다.Sql 쿼리는 한 열의 평균을 계산합니다. 다른 열은 두 열 사이에 있습니다. 다른 테이블의 값

표 1 : 다음과 같은 뭔가

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

표 2 :

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 

답변

0

당신은 당신의 조인 조건에 between 연산자를 사용할 수 있습니다

BETWEEN을 사용하여3210
SELECT date1, date2, AVG(value) 
FROM  table1 
JOIN  table2 ON date3 BETWEEN date1 AND date2 
GROUP BY date1, date2 
+1

Mureinik, 고맙습니다. 정답입니다. 비록 마침내 쿼리가 이것보다 더 많은 것을 가지고 있지만, 이것은 작동합니다! – 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 

또는

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 

그러나 그것은 범위의 양쪽 모두의 포함이다, 아주 좋습니다. 예를 들어 이중 날짜 표에 범위가 겹치면 6/28 2:00 to 6/28:4:00 AND 6/28:4:00 to 6/28 6:00 오후 4시에 착륙하는 모든 값이 반복되어 평균을 왜곡합니다.

두 가지 방법 중 하나를 고칠 수 있습니다.

  • 당신의 BETWEEN 위의 예에서와 같이 큰 작거나 /보다 단지보다는 당신의 범위를 1 개면의 포괄적 6/28 2:00 to 6/28 3:59:59.997
  • 하지 BETWEEN을 사용하고 쓰는 중복이 발생하지 않도록하십시오 . (59) : 만약 3 넣으면 있도록 SQL 서버 용 DATETIME위한

주 3 밀리 정확 59.999 또는 0.998이 처리 될 동일한 AS 4 : 00 : 00.000 해결하는 방법은 사용하는 것이다 .997.

관련 문제