我有一个数据库表,其中每天有多个行项目(每小时一个)。当查询数据库时,我可以获得每天的项目,并可以按日期范围和时间进行过滤,如下所示:
SELECT * FROM readings
WHERE date_recorded > '2022-01-01'
AND date_recorded < '2022-01-15'
AND time_recorded > '08:00:00'
AND time_recorded < '17:00:00';
(Yes,我意识到我可以执行BETWEEN
,但这不是当前构建此查询的方式,因此这是我必须处理的)。
这将给予给定日期范围内8到5之间的所有读数,但我只想得到每天的第一个和最后一个读数。我可以执行SELECT MIN()
操作并将其与SELECT MAX()
操作联合,但在当前查询中,这将只给出整个日期范围内的第一个和最后一个读数(即2022-01-01 08:00:00和2022-01-15 17:00:00),而且我需要每天的第一个和最后一个读数。
我知道我可以通过在提取结果后循环这些结果来对日期进行一些清理,但我想知道是否有一种干净的方法可以在MariaDB(MySQL)中的一个命令中完成这一切?
我不知道这是否会有什么不同,但我将在使用PDO的PHP框架中进行此操作。
1条答案
按热度按时间tcomlyy61#
在MySQL 8+上,我们可以在这里使用
ROW_NUMBER()
: