如何获取name为abc且timestamp最大的id值?
获取指定name对应最大timestamp的ID
给定数据表结构及数据如下:
id, name, timestamp xx,abc,01-01-2022 x1,abc,01-02-2022 x2,abc,01-03-2022 x3,aby,01-01-2022 x4,aby,01-02-2022 x5,aby,01-03-2022
要获取name为abc且timestamp最大的id(预期结果为x2),可根据使用的数据库选择以下方法:
方法一:转日期排序后取第一条(推荐,避免日期比较错误)
由于timestamp是字符串格式,直接按字符串排序可能出现跨年份的逻辑错误,建议先转换为日期类型再排序取值。
MySQL
SELECT id FROM your_table_name WHERE name = 'abc' ORDER BY STR_TO_DATE(timestamp, '%d-%m-%Y') DESC LIMIT 1;
PostgreSQL
SELECT id FROM your_table_name WHERE name = 'abc' ORDER BY TO_DATE(timestamp, 'DD-MM-YYYY') DESC LIMIT 1;
SQL Server
SELECT TOP 1 id FROM your_table_name WHERE name = 'abc' ORDER BY CONVERT(DATE, timestamp, 105) DESC;
方法二:子查询匹配最大timestamp
先查询abc对应的最大timestamp,再关联获取对应id:
SELECT id FROM your_table_name WHERE name = 'abc' AND timestamp = ( SELECT MAX(timestamp) FROM your_table_name WHERE name = 'abc' );
注意:此方法仅适用于
timestamp字符串的比较逻辑与日期大小完全一致的场景,若存在跨年份数据,优先使用方法一。
内容的提问来源于stack exchange,提问作者Carol
相关产品推荐
相关产品推荐

