我建立一个查询有几列的表:选择最近的日期和不同行计算多个值的平均
- 名
- 日期
- 约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
@ user2974776。 。 。你有没有理由不接受答案?我很好奇为什么。 – 2014-09-24 15:38:08
我认为这比问题更清楚,你的答案没有直接解决问题。尽管如此,非常感谢,当然我接受你的答案,因为它有帮助! – user2974776 2014-09-24 15:43:32
@ user2974776。 。 。我只问,因为你没有接受另一个答案(一个不被接受的典型原因)。作为作者,你完全可以控制。您可以编辑我的答案,您的问题,或添加其他答案与问题的完整解决方案。 – 2014-09-24 20:44:39