【问题标题】:average daily amount from timestamps in phpphp中时间戳的平均每日金额
【发布时间】:2014-09-04 16:20:07
【问题描述】:

我有一个带有 2 个值的 mysql 数据库:一个时间戳和一个数量 例如,我将如何计算每个星期三的平均值?

我首先要查看提到了多少个独特的星期三,然后查看每个特定星期三的总值是多少(一天可以有多个条目,但一天中的时间不相关) 然后我必须将所有这些值加起来,然后除以星期三的数量。

我知道这很奇怪,这就是为什么我可能没有找到任何关于它的原因。我将如何在 PHP 中执行此操作?

【问题讨论】:

  • 我认为你应该使用 MySQL 而不是 PHP。

标签: php mysql date timestamp


【解决方案1】:

您可以使用这样的查询来获取每个工作日的每日平均值。

SELECT DAYOFWEEK(date_only), AVG(total) FROM (
    /*The subquery will return total amounts for each distinct day
      regardless of how many records there are for each day. */ 
    SELECT
        DATE(your_table.timestamp_column) as date_only, 
        SUM(your_table.amount_column) as total 
    FROM your_table 
    GROUP BY DATE(your_table.timestamp_column)) as daily_totals
GROUP BY DAYOFWEEK(date_only);

DATE() 将只取时间戳中的日期部分。按此值分组并使用 SUM() 聚合函数将获得每天的总数。

DAYOFWEEK() 从代表星期几的日期返回一个数值(1=星期日等)。按此值分组并使用 AVG() 聚合函数将获得每个工作日的平均总数。

如何在 PHP 中处理结果将取决于您的具体需求。

【讨论】:

  • 感谢您的回答。因为我更喜欢 PHP 而不是 mysql,所以这对我来说有点夸张。这会给我一个按顺序排列一周中每一天的所有平均值的数组吗?
  • 是的,没错。对不起,阿拉丁布拉卡达布拉。我可以编辑答案以添加一些解释。
【解决方案2】:

假设您有一个包含以下列的表:id 时间戳量

您必须从表中选择所有行并将它们放入数组中。 完成后通过数组

<?php
$total = 0;
$bingo = 0;
foreach($a as $i)
{
    if(date( "l" ,$i["timestamp"]) == "Wednesday")
    {
        $bingo++;
        $total += $i["amount"];
    }
}
$avg = $total/$bingo;

?>

【讨论】:

  • 嘿,感谢您的快速响应,是的,我的桌子确实分配了 ID。无论如何,日期(“l”部分是否以文本格式输出星期几?因为这就是我在这里理解的范。
  • 另外,我刚才想到的,说在同一个星期三有两个条目,那么它会添加到 $bingo 两次。我将如何改变它来做到这一点?
  • date( "l" ,$timestamp) 这将返回文本格式的日期名称
  • 好的,非常感谢你的想法,我会试着玩弄这个,所以我每天都会得到一个独特的条目,可能类似于检查是否提到了具体日期之前。
  • 这段代码将统计所有条目,即使在同一个星期三有多个条目。要首先更改它,您必须设置一个条件,您希望它被计算在内(第一个、最后一个、最高、最小)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 2016-12-05
  • 1970-01-01
  • 2017-04-05
相关资源
最近更新 更多