PLSQL中如何按插入时间戳筛选电影评分表的对应记录
SQL查询问题解答
筛选16:00-16:10插入的前两条记录
首先明确前提:该查询依赖表中存在存储插入时间的字段,常见字段命名为create_time、insert_time,以下示例均使用create_time指代该字段。
通用查询逻辑
先限定时间范围为昨日16:00-16:10,按插入时间升序排序后取前2条,不同数据库的语法差异如下:
- MySQL/PostgreSQL 写法(动态取昨日日期,无需手动填写):
SELECT ID, USER_REVIEW, USER_RATING, USER_ID, create_time FROM 你的表名 WHERE DATE(create_time) = DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND TIME(create_time) BETWEEN '16:00:00' AND '16:10:00' ORDER BY create_time ASC LIMIT 2;
- SQL Server 写法:
SELECT TOP 2 ID, USER_REVIEW, USER_RATING, USER_ID, create_time FROM 你的表名 WHERE CAST(create_time AS DATE) = DATEADD(day, -1, CAST(GETDATE() AS DATE)) AND CAST(create_time AS TIME) BETWEEN '16:00:00' AND '16:10:00' ORDER BY create_time ASC;
特殊场景说明:如果你的表没有设计插入时间字段,仅能依赖自增ID和插入时间严格正相关的特性临时查询,该方案可靠性极低,不推荐在生产环境使用:
SELECT ID, USER_REVIEW, USER_RATING, USER_ID FROM 你的表名 WHERE ID IN (1,2) LIMIT 2;
插入时间戳查询说明
能不能查询到具体插入时间戳完全取决于表结构设计:
- 建表时如果设置了带默认值的插入时间字段(默认值一般为当前时间,插入行时自动写入),就可以直接查询该字段拿到精确到秒/毫秒的插入时间戳
- 如果没有单独设置插入时间字段,绝大多数关系型数据库不会默认存储行的插入时间,你无法从现有给出的
ID、USER_REVIEW、USER_RATING、USER_ID四个字段中反推插入时间。仅能通过数据库操作日志、事务快照等底层数据回溯,该操作需要极高权限且复杂度很高,常规业务查询无法实现。
内容的提问来源于stack exchange,提问作者testFreak
相关产品推荐
相关产品推荐

