【发布时间】:2014-07-28 03:51:36
【问题描述】:
我有大量数据,我试图根据 24 小时内的出现次数计算一列的总和。
表格如下:
ID Customer LOCATION FROM_DATETIME TO_DATETIME Amount 24Revenue
23100470 Customer01 Idaho 2014-03-23 23:40 2014-03-24 00:00 8.20 26.65
23111106 Customer01 Idaho 2014-03-24 07:06 2014-03-24 07:26 0.00 22.14
23111865 Customer01 Idaho 2014-03-24 07:27 2014-03-24 07:30 0.00 22.14
23112909 Customer01 Idaho 2014-03-24 07:56 2014-03-24 08:06 3.69 22.14
23122768 Customer01 Idaho 2014-03-24 11:38 2014-03-24 11:46 3.28 18.45
23125519 Customer01 Idaho 2014-03-24 12:35 2014-03-24 12:38 1.23 15.17
23126385 Customer01 Idaho 2014-03-24 12:53 2014-03-24 13:00 2.87 13.94
23141213 Customer01 Idaho 2014-03-24 19:58 2014-03-24 20:16 7.38 11.07
23155172 Customer01 Idaho 2014-03-25 06:52 2014-03-25 07:01 3.69 3.69
23165719 Customer02 Idaho 2014-03-25 10:52 2014-03-25 13:34 44.97 70.21
23173857 Customer02 Idaho 2014-03-25 13:36 2014-03-25 13:43 2.87 25.24
23174971 Customer02 Idaho 2014-03-25 14:00 2014-03-25 14:04 1.64 22.37
23176607 Customer02 Idaho 2014-03-25 14:40 2014-03-25 14:52 4.51 20.73
23178488 Customer02 Idaho 2014-03-25 15:24 2014-03-25 16:04 0.00 16.22
23181743 Customer02 Idaho 2014-03-25 16:42 2014-03-25 17:45 16.22 16.22
此时我在选择一个为期1周的数据集:
SELECT ID, Customer, from_datetime, to_datetime, location
WHERE to_datetime BETWEEN '2014-03-24 00:00:00' AND '2014-03-31'
AND location='Idaho';
此查询返回 $recordset。
然后使用 PHP 中的该数据集,我循环遍历每条记录,然后再次查询数据库,以对具有相同车牌且发生在该时间后 24 小时内的所有记录的收入列求和:
foreach ($recordset as $key => $value) {
$fromdate=date('Y-m-d H:i:s',strtotime($rsRentals[$key]['to_datetime']));
$todate=strtotime(date('Y-m-d H:i:s', strtotime($fromdate)) . " +24 hours");
SELECT SUM(amount) as revenue WHERE plate='$recordset[$key]['plate']'
AND location = 'Idaho' AND to_datetime >= '$fromdate' AND from_datetime < '$todate'
}
我的问题是,根据我的计算(2 分钟内 50 个总和),大约需要 13-14 小时来汇总 ~20000 条记录。这太长了,我认为必须有一种更简单的方法来使用 JOIN 或其他东西运行此查询,但我的尝试失败了。以上是我能够成功完成的唯一设置,尽管数据集有限。
有没有人对我可以做些什么来获得相同的结果但更快、更有效的查询有什么建议?
【问题讨论】:
-
请格式化您问题中的代码和sql表。您发布的内容缺乏格式,阅读起来非常粗糙。
-
谢谢。我刚刚意识到它发布了纯文本并即将更新它。干杯!