2014-10-13 4 views
1

저는 SQL에 익숙하지 않아 평균값을 찾는 방법을 찾는 데 어려움이 있습니다. 기본적으로 3 열, 날짜, ID 및 값이있는 테이블이 있습니다. 매일 각 ID의 평균을 찾으려고합니다. 실제 테이블에는 매일 수천 개의 ID가 기록되는 값을 가진 수천 개의 항목이 있습니다. 아래 샘플 테이블SQL - 날짜 별 평균 값 및 ID

SAMPLE TABLE 
Date   ID  Value 
1-1-14 12:45 1  5 
1-1-14 13:45 1  6 
1-1-14 08:45 2  8 
1-1-14 10:45 2  8 
1-2-14 01:45 1  2 
1-2-14 04:45 1  4 
1-2-14 01:45 2  20 
1-2-14 04:45 2  24 

SAMPLE RESULTS 
Date  ID  AvgValue 
1-1-14  1  5.5 
1-1-14  2  8 
1-2-14  1  3 
1-2-14  2  22 

나는 어떤 도움을 주셔서 감사합니다! 감사!

+2

가능한 복제를 (그리고 나는 많은 사람들이 확신) - http://stackoverflow.com/questions/3100921/average-of- grouped-rows-in-sql-server – dugas

+0

추가 리소스를 가져 주셔서 감사합니다! 나는 결정하기 전에 오랜 시간 동안 수색했다. 검색 창에서 올바른 문구를 사용하지 않고도 질문에 대한 답변을 찾는 것은 어렵습니다. 나는 그 링크를 고맙게 생각하고 나의 문제를 해결하는 데 도움을 줄 것이다. – fondue222

답변

2

기본 쿼리는 간단하다 :

select date, id, avg(value) 
from your_table 
group by date, id, avg 

그러나, 당신은 단지 날짜 컬럼의 날짜 부분을 원하는대로 당신은 또한/캐스트 좁은 날짜 형식에 그 변환 할 수 있습니다 값이 만약 당신이 평균은 먼저 부동 소수점 유형으로 변환해야하는 int입니다. SQL Server의 쿼리는 다음과 같이 수 :

select 
    cast(date as date) as date, 
    id, 
    avg(cast(value as decimal(10,5))) as avg 
from table1 
group by cast(date as date), id 
order by 1 

Sample SQL Fiddle

+0

나는 틀린 일을하고 있다고 믿는다. 두 질문 중 하나를 사용할 때 각 ID의 각 날짜마다 여러 값을 반환한다. 날짜와 값 필드에 CAST를 사용했지만 작동하지 않는 것 같습니다. – fondue222

+0

@ fondue222 어떤 데이터베이스를 사용하고 있습니까? 날짜 당 하나 이상의 값을 얻는다면 그룹화가 날짜 만이 아닌 전체 datetime 수준에서 일어나기 때문입니다. 어쩌면'cast (date as date)'를 사용하는 것이 특정 데이터베이스를위한 올바른 방법이 아닙니다. mysql과 postgresql을 사용하면 다른 캐스팅이나 변환이 필요할 것입니다. – jpw