没有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
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;
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