SET @i=0;
SELECT DATE_FORMAT(t.time,'%m-%d %H') as dateValue FROM
(SELECT DATE_SUB('2023-08-20 00:00:00',INTERVAL ( (@i:=@i+1) ) HOUR ) AS 'time'
FROM mysql.help_category where @i<24)
AS t
当设置了查询24小时 数据查出来0-23 数据是正常的
但是当设置了大于43 之后 不管设置多少返回只有43条数据 这个是为啥,求解
SET @i=0;
SELECT DATE_FORMAT(t.time,'%m-%d %H') as dateValue FROM
(SELECT DATE_SUB('2023-08-20 00:00:00',INTERVAL ( (@i:=@i+1) ) HOUR ) AS 'time'
FROM mysql.help_category where @i<48)
AS t
这样写的话help_category表有多少数据不就显示多少行么
【以下回答由 GPT 生成】
这个问题的原因是在查询语句中设置了一个变量@i,并且在子查询中对其进行了递增操作。然而,在MySQL中,对于subquery的执行是无序的,并且可能会在同一个查询中多次执行。这意味着在查询的不同部分中,@i的值可以是不同的,而不是连续递增的。
为了解决这个问题,可以使用一个单独的查询来生成一个连续的数字序列,然后将其与日期进行组合,最终用于查询过去48小时的数据。下面是一个示例代码:
SELECT DATE_FORMAT(DATE_SUB('2023-08-20 00:00:00', INTERVAL n.num HOUR), '%m-%d %H') as dateValue
FROM (
SELECT a.i*10 + b.i AS num
FROM (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3) AS a
CROSS JOIN (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3) AS b
ORDER BY num DESC
) AS n
WHERE n.num >= 1 AND n.num <= 48
这个查询先生成一个数字序列,范围是从0到39,然后将其与给定日期相减得到48小时内的连续日期时间。最后,使用DATE_FORMAT函数将日期时间格式化为你需要的格式。
请注意,这是一种动态生成48小时内的连续日期时间的方法,对于其他的时间范围,你可以根据需要修改查询中的num范围。
希望上述解决方案能够帮助你解决该问题。如果还有其他问题,请随时提出。
【相关推荐】