2014-09-18 73 views
-1

我建立一個查詢有幾列的表:選擇最近的日期和不同行計算多個值的平均

  • 日期
  • 約10列一個整數

現在我想要返回一個表,該表返回一行名稱列的每個唯一元素。 該行有三列:名稱,日期和整數值列的平均值。 日期是此特定名稱元素的最新日期。 而平均值是此特定行的所有整數值的平均值。

SELECT name, Max(date), SUM(value1+value2+value3+value4...+value10)/10 
FROM myTable 
WHERE *join statements* 
Group by name 

這樣做的問題是,即,由於面那筆聚集的列的所有值,計算出的值不是這個單個行的平均。 將值添加到group by語句是不可能的,因爲每個名稱只能顯示一行結果。

希望問題清楚。有任何想法嗎?謝謝!


編輯: 謝謝您的回覆戈登·利諾夫!我的問題的表述並不清楚,對此表示遺憾。

其實可以存在具有相同名稱和日期的條目。因此,我需要彙總這些條目,以防它是此特定名稱元素的最新日期。

澄清,這裏可能表:

|名稱|日期|值1 |值2 |

|名稱A | 14/09/24 | 1 | 2 |

|名稱A | 14/09/24 | 2 | 1 |

|名稱A | 14/09/24 | 9 | 9 |

|名稱A | 14/09/22 | 4 | 3 |

|名稱B | 14/09/23 | 3 | 5 |

|名稱B | 14/09/22 | 2 | 4 |

|名稱B | 14/09/21 | 4 | 2 |

|名稱C | 14/09/23 | 5 | 1 |


結果是768,16:

|名稱|日期|魅力|

|名稱A | 14/09/24 | 4 |

|名稱B | 14/09/23 | 4 |

|名稱C | 14/09/23 | 3 |

有了您的提示,我想我找到了正確的查詢對於這個問題,其中2是每行的值的數目:其實你不想要一個總

SELECT name, max(date), avg(value1+value2)/2 
FROM myTable t 
WHERE not exists (select 1 
        from myTable t2 
        where t2.name = t.name and t2.date > t.date 
       ) 
group by name 

回答

1

。您想爲每個名稱選擇最近的行。以下是使用not exists的方法:

SELECT name, date, (value1+value2+value3+value4...+value10)/10 
FROM myTable t 
WHERE not exists (select 1 
        from myTable t2 
        where t2.name = t.name and t2.date > t.date 
       ); 
+0

@ user2974776。 。 。你有沒有理由不接受答案?我很好奇爲什麼。 – 2014-09-24 15:38:08

+0

我認爲這比問題更清楚,你的答案沒有直接解決問題。儘管如此,非常感謝,當然我接受你的答案,因爲它有幫助! – user2974776 2014-09-24 15:43:32

+0

@ user2974776。 。 。我只問,因爲你沒有接受另一個答案(一個不被接受的典型原因)。作爲作者,你完全可以控制。您可以編輯我的答案,您的問題,或添加其他答案與問題的完整解決方案。 – 2014-09-24 20:44:39