2012-09-24 111 views
2

在SQL中,3個表連接在一起,撤回3個值:value,time,value_name。值是我希望每天平均的值,time約爲10分鐘的日期時間格式 - 這是我希望它每天都進行轉換,每天導致一行 - 而我的value_name是任何選定的值。每天多條記錄,每天轉換爲每天的值和每天的平均值

這裏是我的語法:

select time.entry_time, value_type.value_name, 
     avg(value.value) AVG_VALUE 
FROM Value 
inner join time on value.time_id = time.id 
inner join value_type on value.type_id = value_type.id 
WHERE value_type.value_name = 'CUSTOM' 
GROUP BY DATEPART(DAY, time.entry_time) 

在這裏,我得到一個錯誤:

Column time.entry_time is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

能否請你幫我這個語法?

+1

你可以張貼例如輸入數據和預期的輸出數據? – shahkalpesh

回答

3

兩個問題:

  1. 您選擇time.entry_time,但其上進行分組DATEPART(DAY, time.entry_time)。你想要哪個入場時間?你的意思是選擇DATEPART(DAY, time.entry_time)而不是?

  2. 您沒有按value_type.value_name分組。您需要將此添加到GROUP BY條款。 (是的,即使只有一個值'CUSTOM')。

嘗試:

select DATEPART(DAY, time.entry_time), value_type.value_name, 
     avg(value.value) AVG_VALUE 
FROM Value 
inner join time on value.time_id = time.id 
inner join value_type on value.type_id = value_type.id 
WHERE value_type.value_name = 'CUSTOM' 
GROUP BY DATEPART(DAY, time.entry_time), value_type.value_name 
+0

謝謝你的回答。它正在工作! –