2014-09-18 39 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