【问题标题】:How do I select a summed range of columns from MySQL within a 24 hour period?如何在 24 小时内从 MySQL 中选择列的总和范围?
【发布时间】: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表。您发布的内容缺乏格式,阅读起来非常粗糙。
  • 谢谢。我刚刚意识到它发布了纯文本并即将更新它。干杯!

标签: php mysql select join


【解决方案1】:

使用第一个查询获取车牌列表,

然后将其作为子查询插入到更大的查询中,其中您的盘子是您的分组依据,而您在外部查询中的位置是时间介于 TO_DATETIME 和 TO_DATETIME-24 之间的位置

【讨论】:

  • 好的,我明白你在说什么,但无法复制它。我以为这就是我开始做的事情,但我看到我每次都查询,而我相信你说的是运行一次,只是一个大规模的查询。您是否有机会代表您所指的查询?
  • 我应该澄清 24Revenue 列是我正在寻找的结果,对于每个查询。本质上,我想查看该客户在该特定交易的 24 小时内产生了多少收入(金额)。
  • 我应该澄清一下,板块列实际上是命名为客户。对此感到抱歉。
  • 我尝试了以下查询但没有成功: SELECT SUM(amount) AS income FROM rentaldetails WHERE to_datetime BETWEEN '2014-03-24 00:00:00' AND '2014-03-25 ' AND id = (SELECT id FROM rentaldetails WHERE to_datetime BETWEEN '2014-03-24 00:00:00' AND '2014-03-31' AND location='Idaho') GROUP BY id;
猜你喜欢
  • 2018-03-08
  • 2015-04-22
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
  • 1970-01-01
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多