在MySQL中仅检索最新的一行

3

我有一张MySQL表,其中包含了姓名、表现和日期时间等列。如何只检索最近的MySQL行?


取决于你如何确定最近的行,是否有顺序 ID 或“创建/更新”时间戳或其他可依据的东西? - T I
是的,date_time有一个时间戳。 - user1538709
6个回答

4
作为一种替代方案:
SELECT *
FROM yourtable
WHERE date_and_time = (SELECT MAX(date_and_time) FROM yourtable)

这样做的优点在于,它可以捕获快速插入多行数据并最终具有相同时间戳的情况。

3
...
ORDER BY `date and time` DESC
LIMIT 1

请注意,这不是最近添加的行,而是具有“最新”值的行在日期和时间列中,这可能是您要查找的内容。

3

SELECT * FROM table ORDER BY date, time LIMIT 1


2
SELECT name,
       perf,
       date_and_time
FROM   table
ORDER  BY date_and_time DESC
LIMIT  1 

2
日期和时间是分开的吗?"最近"是什么意思?如果日期和时间是分开的字段或不涉及用户活动,并且您指的是"最近由用户更新",那么您可能需要知道,时间敏感表通常包含一个类似于"updated_at"的字段,其中包含一个MySQL标准时间戳,例如'1989-11-09 12:34:32'。也许您应该考虑在您的架构中引入这样一个字段。然后,您可以设置触发器来更新日期时间信息,如下所示:
CREATE TRIGGER mytable_update BEFORE UPDATE ON `mytable`
FOR EACH ROW SET NEW.updated_at = NOW();

当然,您可以通过选择语句检索最近更新的记录,如上面所述:
ORDER BY `updated_at` DESC LIMIT 1;

此外,时间敏感表通常有一个字段'created_at',当行插入时设置一个不变的时间戳。通常会与触发器连接在一起:

CREATE TRIGGER mytable_create BEFORE INSERT ON `mytable`
FOR EACH ROW SET NEW.created_at = NOW(), NEW.updated_at = NOW(); 

上面的第一个触发器应该反映这一点,并带有一个附加语句来携带created_at信息:
NEW.created_at = OLD.created_at;

如果您使用框架(比如 Django,正如您标记的 Python),这可以通过 ORM 处理。

良好的建议。注意,MySQL TIMESTAMP 数据类型可以提供与您的触发器相同的功能,只需进行简单的声明,无需编写过程代码即可实现。为了使此功能正常工作,需要满足一些限制条件:表中列的顺序以及这些列的值不应在 INSERT 和 UPDATE 语句中提供。触发器的一个优点是,由触发器维护的列中的值不能被用户提供的值“覆盖”。 - spencer7593

-1

对于 SQL Server:选择最新的一行:select top 1 * from tablename order by date_and_time DESC

对于 MySQL:选择最新的一行:select * from tablename order by date_and_time DESC limit 1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接