我正在为客户开发一个网站。它需要一种特殊的方法来创建计算。在表中,我必须创建具有相同“%End”的行组。
由于在开始时(2011年11月24日)只有一行90%,你只需忽略它。 例如,我必须选择日期为
的行2011年11月26日 2011年11月28日 2011年11月29日
然后进行计算,稍后选择日期
2011年12月4日 2011年12月5日 2011年12月6日
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'值中划分。 < ---这就是我要找的东西。
答案 0 :(得分:3)
您需要什么样的计算?我认为这是MySQL的基础。例如:
SELECT percent_end, SUM(cakes) as sumcakes
FROM table
GROUP BY percent_end
每个%_END只是SUM
个蛋糕。使用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
答案 1 :(得分:1)
根据上面的回答,您可以通过以下类似的程序来避免计算单个日期条目:
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
答案 2 :(得分:0)
类似的东西:
for(i=0; i<data.length-1; i++) {
arr = []
while(data[i].end_value == data[i+1].end_value) {
arr.append(data[i].end_value)
i++;
}
arr.append(data[i+1].end_value)
if(arr.length > 1)
// Then you've found a group and do the calculation with the values in the array
}
调整所需工作的语法;你可能想要做这个服务器端。