【问题标题】:mysql query group by day on timestampmysql 在时间戳上按天查询组
【发布时间】:2018-01-21 12:16:34
【问题描述】:

我有下表:

id   income created_at
-----------------------
966  300    1516182896
965  -1050  1516188513
964  2000   1516444061
963  600    1513267843

我正在运行以下查询以获取每天(过去 10 天)的收入总和:

SELECT sum(income) AS income, `created_at`
FROM `incomes`
WHERE `created_at` BETWEEN (UNIX_TIMESTAMP(NOW() - INTERVAL 10 DAY))
  AND UNIX_TIMESTAMP(NOW())
GROUP BY DATE(FROM_UNIXTIME("created_at"))

我刚刚得到:

income  created_at
-------------------
1850    1516182896

它给出了总和,而不管最后一次created_at的日期如何。

我错过了什么?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您正在转换字符串 created_at - 删除引号或使用 mysql 转义字符(反引号)。请注意,创建的 at 仍然不确定,您可能应该选择 DATE(FROM_UNIXTIME(created_at))

    【讨论】:

      【解决方案2】:
      SELECT sum(income) AS income, DAYOFYEAR(FROM_UNIXTIME(created_at)) as doy
      FROM `incomes`
      WHERE `created_at` BETWEEN (UNIX_TIMESTAMP(NOW() - INTERVAL 10 DAY))
        AND UNIX_TIMESTAMP(NOW())
      GROUP BY doy;
      

      您按 varchar "created_at" 而不是列 created_at 分组时出错。

      【讨论】:

        【解决方案3】:

        你应该添加日期来选择:

        SELECT sum(income) AS income, `created_at`, DATE(FROM_UNIXTIME(`created_at`)) as dd
        FROM `incomes`
        WHERE `created_at` BETWEEN (UNIX_TIMESTAMP(NOW() - INTERVAL 10 DAY))
          AND UNIX_TIMESTAMP(NOW())
        GROUP BY dd
        

        【讨论】:

        • 请注意您的答案有两个错误。您正在使用 varchar "created_at" 而不是 created_at 列名并选择 created_at 也不是在 GROUP BY 中。
        • 你是对的@marcell,我只是复制粘贴了 SQL 的那部分
        猜你喜欢
        • 2015-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-24
        • 2021-05-12
        • 2013-01-24
        相关资源
        最近更新 更多