나는 다음과 같은 데이터 세트가 있습니다이상한 윈도우 함수의 행동
player | score | day
--------+-------+------------
John | 3 | 02-01-2014
John | 5 | 02-02-2014
John | 7 | 02-03-2014
John | 9 | 02-04-2014
John | 11 | 02-05-2014
John | 13 | 02-06-2014
Mark | 2 | 02-01-2014
Mark | 4 | 02-02-2014
Mark | 6 | 02-03-2014
Mark | 8 | 02-04-2014
Mark | 10 | 02-05-2014
Mark | 12 | 02-06-2014
을 감안할 때 두 시간 범위 :
02-01-2014..02-03-2014
02-04-2014..02-06-2014
내가 평균 점수를 얻을 필요를 주어진 시간 범위 내의 각 플레이어에 대해 내가 달성하기 위해 노력하고있어 궁극적 인 결과는 이것이다 :
player | period_1_score | period_2_score
--------+----------------+----------------
John | 5 | 11
Mark | 4 | 10
내가 생각 해낸 최초의 알고리즘을했다 :
- 가 각각 두 개로 점수의 세트를 분할하여 산출,이 개 값
SELECT
을 수행 기간 - 첫 번째
SELECT
을 초과하는 경우 플레이어 이름으로 집합을 그룹화하여 다른 것을 수행하십시오. 다음 쿼리 실행 :
내가 1 단계에 붙어
SELECT
player,
AVG(score) OVER (PARTITION BY day BETWEEN '02-01-2014' AND '02-03-2014') AS period_1,
AVG(score) OVER (PARTITION BY day BETWEEN '02-04-2014' AND '02-06-2014') AS period_2;
나에게 잘못된 결과를 가져옵니다을 (period1
및 period2
평균 점수 점수가 동일한 방법주의 :
player | period_1_score | period_2_score
--------+----------------+----------------
John | 5 | 5
John | 5 | 5
John | 5 | 5
John | 5 | 5
John | 5 | 5
John | 5 | 5
Mark | 4 | 4
Mark | 4 | 4
Mark | 4 | 4
Mark | 4 | 4
Mark | 4 | 4
Mark | 4 | 4
윈도우 기능이 어떻게 작동하는지 완전히 이해하지 못한다고 생각합니다. 질문이 두 개 있습니다.
- 내 쿼리에 어떤 문제가 있습니까?
- 어떻게해야합니까?
날짜를 'DATE'가 아닌 문자열로 저장하는 이유는 무엇입니까? 더 나쁜 것은, 왜 당신은 처음에 그 날 (또는 달)과 그 해를 마지막으로 보관하고있는 것입니까? –
''02 -06-2014 ''가 6 월 2 일 또는 2 월 6 일 중 2 일 경우 어떻게 알 수 있습니까? 날짜를 문자열로 저장하고이 형식으로 저장하면 "02 -06-2014"의 "date"는 SQL-2005에서 "date-01-2010"보다 나중에 간주됩니다. 섬기는 사람? –