gpt4 book ai didi

mysql - 按时间段分组仅显示非零总数

转载 作者:行者123 更新时间:2023-11-30 23:38:09 26 4
gpt4 key购买 nike

我正在执行一个 mysql 查询来计算每分钟的条目数并绘制结果图。结果输出仅显示金额不为零的时间戳。这导致我的图表提供不正确的结果,因为它在两点之间画一条线的时间存在差距。我想返回每分钟和值的数量。

有没有一种无需循环和执行多个查询即可构建此查询的方法?或者,如果我需要一个循环,是否有一种简单的方法可以循环遍历两个时间戳之间的每一分钟?

这是我的查询:

SELECT UNIX_TIMESTAMP(timestamp) AS timestamp, count(*) AS total  
FROM table
WHERE timestamp <= '2011-04-22 11:00' AND timestamp >= '2011-04-20 10:00'
GROUP BY MINUTE(timestamp)

最佳答案

您要做的是使用“计数”或“数字”表。基本上,您创建了一个表,其中有一个整数列,其中的数字从 1 递增到一个非常大的数字。所以,如果理货表有 1000 条记录,则 1 到 1000 的数字都在表中。你会想在其中输入比 1000 更多的数字,但希望你能理解。

一旦您有了计数表(单击 here 获取脚本),您可以将其选择到您的查询中,其中 numtablevalue 介于 1 和 enddate - startdate 之间(以分钟为单位)。然后按 startdate + numtablevalue 分组。

所以像这样的东西(伪 SQL)应该可以工作:

SELECT 'startdate' + INTERVAL tt.id MINUTE, COUNT(t1.timestampfield)
FROM tallytable AS tt
INNER JOIN
table AS t1
ON 'startdate' + INTERVAL tt.id MINUTE = t1.timestampfield
WHERE
tt.id BETWEEN 1 AND GETMINUTES('enddate' - 'begindate')
GROUP BY 'startdate' + INTERVAL tt.id MINUTE

基本上,我们选择从 1 到两个日期之间的秒数的数字。然后我们使用 startdate + tt.id 获取日期之间的每一秒。然后,我们加入并对其进行分组,以查找 t1 中使用数字表选择的每分钟内的记录数。我希望这是有道理的。

您可能需要注意以下几点:

  • 这将获得时间 > 开始日期(而不是 >= 开始日期)
  • 如果您的时间戳与秒相关联,请小心,因为 5:12 PM 可能不等于 5:12:30 PM

关于mysql - 按时间段分组仅显示非零总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5747725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com