sql选择查询其中记录匹配列的最大值,少于给定偏移?

问题描述 投票:0回答:1

没有SQL专家,并且已经绊倒了一个复杂的查询问题(至少对我来说)。 我有一个桌子测试...

Time位置

10a
1b
2c
3d
4e

我想在最大时间值和给定的最大时间的负偏移之间返回所有记录,例如时间> = 10和时间<= (10 - 7)... So Time range would be 3 to 10, thus query result would be...

Time位置

10a
4e
3d

表不断获得新的记录,其中每个记录的时间总是在增加,因此这是列时间的滑动范围。

我尝试了... 从测试中选择 *,max(time)。

但至少在MariadB SQL语法中,您不能在Where子句中使用Max? 我发现“组功能无效”错误,因此显然此查询比我预期的要复杂吗? <= MAX(Time) And (Time >

您可以使用子查询或cte来获取表格的最高时间,然后使用`'在'之间``''''''以获取满足您条件的行。

请参阅此

DB<>fiddle
sql mysqli mariadb
1个回答
0
投票
使用一个纯粹的子查询:

SELECT t.time, t.location FROM test t INNER JOIN (SELECT MAX(time) AS time FROM test) m ON t.time BETWEEN m.time - 7 AND m.time ORDER BY t.time DESC;

使用CTE:

WITH max_time AS (SELECT MAX(time) AS time FROM test) SELECT t.time, t.location FROM test t INNER JOIN max_time m ON t.time BETWEEN m.time - 7 AND m.time ORDER BY t.time DESC; -- remove the sort if not required


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.