需要的想法:选择表格中的行

我正在为客户开发一个网站。 它需要一种特殊的方法来创建计算。 在表中,我必须创建具有相同“%End”的行组。

表

由于在开始时(2011年11月24日)只有一行90%,你只需忽略它。 例如,我必须选择带日期的行

2011年11月26日2011年11月28日2011年11月29日

然后进行计算,稍后选择日期

2011年12月4日2011年12月05日2011年12月06日

2011年12月7日和12月09日的行也会被忽略,因为在它们之前或之后没有相同百分比的行。

等等。

我很失落如何做到这一点。 如何创建日期组来计算它们? 有一种简单而有效的方法吗?

我的“资源”是PHP,jQuery和MySQL

任何帮助表示赞赏,自星期一以来我一直坚持这一点。

编辑:表的信息由存储过程EDIT2获取:表必须以最终感知率90%开始和结束

开始90%….任何价值…… 90%结束

edit3:这是我的存储过程(可能有助于更好地理解http://pastebin.com/cZM1j72u )

解决我的问题我可以使用PHP,Javascript(jQuery)或mysql

这个想法是从2011年12月17日起采取口袋妖怪的价值,并从2012年12月14日减去。

该值将从12月14日的“Galons”值中划分。 <—这就是我在寻找的东西。

你需要什么样的计算? 我认为这是MySQL的基础。 例如:

SELECT percent_end, SUM(cakes) as sumcakes FROM table GROUP BY percent_end 

这只是每个%_END的蛋糕的总和。 使用GROUP BY

如果您不需要只有一条记录的%_END:

 SELECT percent_end, SUM(cakes) as sum_cakes, COUNT(date) as date_amount FROM table GROUP BY percent_end HAVING date_amount > 1 

通过上面的Tosins回答,您可以通过遵循类似于此的过程来避免计算单个日期条目:

 SELECT percent_end, SUM(cakes) as sum_cakes, COUNT(DISTINCT(date)) as date_amount FROM table WHERE date_amount > 1 GROUP BY percent_end 

在这种情况下,除非有2个或更多不同的日期范围,否则不会返回记录。 但是,如果您需要更复杂的日期比较函数,SQL将开始看起来非常复杂。 如果您需要检查 – 例如 – 如果在相同百分比的记录之前或之后的日期是’x’天之前或之后’x’天,那将是一个全新的球赛。 在更复杂的计算中,我个人会使用PHP数组并执行各种排序和省略函数。 许多人可能不同意我的意见,但我发现有时你会花费数天的时间来尝试制作一些看起来像是来自火星的麻烦的SQL查询。

*编辑*我刚才用上面的例子意识到了一个可怕的错误! 当然它不会工作,我在where子句中使用了date_amount,而date_amount是一个AS字段,换句话说不是实际的列名。 因为SQL从内到外进行求值,所以WHERE子句在AS子句之前发生,因此会抛出错误并告诉你date_amount不存在。 对于那个很抱歉。 我完全离开它,以防它帮助某人。

然而,可以改变SQL并使用HAVING子句获得相同的期望效果:

 SELECT percent_end, SUM(cakes) as sum_cakes, COUNT(DISTINCT(date)) as date_amount FROM table GROUP BY percent_end HAVING date_amount > 1 

就像是:

 for(i=0; i 1) // Then you've found a group and do the calculation with the values in the array } 

调整所需工作的语法; 你可能想要做这个服务器端。