gpt4 book ai didi

mysql - mySql 中的小时明智数据

转载 作者:行者123 更新时间:2023-11-29 12:16:08 25 4
gpt4 key购买 nike

我有包含以下字段的表格

Createdon(datetime)
Amount(double)

我需要查找给定日期接下来 24 小时内的金额总和。如果没有结果,则总和应为零。例如

duration  sum
0000-0001 25.43
0001-0002 36.85
0002-0003 0
.
.
.
.
0022-0023 38.56

您能帮我创建一个查询来查找所需的解决方案吗

最佳答案

查询的关键是能够获取任何日期时间值并将其截断为最近的一小时。您可以使用以下表达式来做到这一点:

 DATE_FORMAT(Createdon, '%Y-%m-%d %H:00')

例如,给定 2015-04-21 14:22:05,这将返回 2015-04-21 14:00:00

然后你在 GROUP BY 中使用它

SELECT DATE_FORMAT(Createdon, '%Y-%m-%d %H:00') Createdhour,
SUM(Amount) sum
FROM theTable
GROUP BY DATE_FORMAT(Createdon, '%Y-%m-%d %H:00')
ORDER BY DATE_FORMAT(Createdon, '%Y-%m-%d %H:00')

最后,我认为您想要一天的结果。您需要添加一个 WHERE 子句才能获得该结果。此处显示的结果将采用昨天的结果 - 即 [昨天午夜 - 今天午夜] 的所有结果。

SELECT DATE_FORMAT(Createdon, '%Y-%m-%d %H:00') Createdhour,
SUM(Amount) sum
FROM theTable
WHERE CreatedOn >= DATE(NOW()) - INTERVAL 1 DAY
AND CreatedOn < DATE(NOW())
GROUP BY DATE_FORMAT(Createdon, '%Y-%m-%d %H:00')
ORDER BY DATE_FORMAT(Createdon, '%Y-%m-%d %H:00')

这在http://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/中有更详细的解释。

要包含一天中的所有时间,您将需要不同 DATETIME 项目的独立来源。

这是一个可以执行此类操作的查询。

      SELECT mintime + INTERVAL seq.seq HOUR AS CreatedHour
FROM (
SELECT DATE(NOW()) - INTERVAL 1 DAY AS mintime,
DATE(NOW()) AS maxtime
) AS minmax
JOIN seq_0_to_23 AS seq
ON seq.seq < TIMESTAMPDIFF(HOUR,mintime,maxtime)

然后您需要使用LEFT JOIN 来获取数据。

SELECT a.Createdhour,
SUM(Amount) sum
FROM (
SELECT mintime + INTERVAL seq.seq HOUR AS CreatedHour
FROM (
SELECT DATE(NOW()) - INTERVAL 1 DAY AS mintime,
DATE(NOW()) AS maxtime
) AS minmax
JOIN seq_0_to_23 AS seq
ON seq.seq < TIMESTAMPDIFF(HOUR,mintime,maxtime)
) a
LEFT JOIN theTable t
ON a.CreatedHour = DATE_FORMAT(t.Createdon, '%Y-%m-%d %H:00')
GROUP BY DATE_FORMAT(t.Createdon, '%Y-%m-%d %H:00')
ORDER BY DATE_FORMAT(t.Createdon, '%Y-%m-%d %H:00')

最后,您需要以某种方式获取该表seq_0_to_23。如果您正在运行 MariaDB,它是内置的。如果没有……

CREATE TABLE seq_0_to_23 AS
SELECT 0 AS seq
UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3
UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12
UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15
UNION ALL SELECT 16 UNION ALL SELECT 17 UNION ALL SELECT 18
UNION ALL SELECT 19 UNION ALL SELECT 20 UNION ALL SELECT 21
UNION ALL SELECT 22 UNION ALL SELECT 23

这以更通用的形式写在 http://www.plumislandmedia.net/mysql/filling-missing-data-sequences-cardinal-integers/

关于mysql - mySql 中的小时明智数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29771812/

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