4

我正在为客户开发一个网站。它需要一种特殊的方式来创建计算。在表中,我必须创建具有相同“% 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 月 07 日和 2011 年 12 月 9 日的行也会被忽略,因为在它们之前或之后没有相同百分比的行。

等等。

我很不知道该怎么做。如何创建日期组来计算它们?有没有简单有效的方法来做到这一点?

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

任何帮助表示赞赏,从星期一开始我就一直坚持下去。

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

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

edit3:这是我的存储过程(也许它可以帮助更好地理解http://pastebin.com/cZM1j72u

为了解决我的问题,我可以使用 php、Javascript( jQuery ) 或 mysql

这个想法是从 2011 年 12 月 17 日开始获取口袋妖怪的值并从 2012 年 12 月 14 日减去。

该值将与 12 月 14 日的“加隆”值相除。<---这就是我要找的。

4

3 回答 3

3

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

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

这只是SUM每个 %_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
于 2012-04-25T21:25:23.677 回答
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
于 2012-04-25T21:52:07.850 回答
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
}

为您需要的任何工作调整语法;您可能想要在服务器端执行此操作。

于 2012-04-25T21:25:13.560 回答