SQL实现查询指定员工最近5个不重复已检查Asset_ID的方法
解法
你需要先对Asset_ID分组,取每个资产的最新检查时间作为排序依据,再去重取前5条即可,不同数据库写法略有差异:
通用写法(适用于MySQL、PostgreSQL等)
SELECT Asset_ID FROM EmployeeLog WHERE Employee_ID = @Emp_ID AND Asset_ID != '00000000-0000-0000-0000-000000000000' GROUP BY Asset_ID ORDER BY MAX(DateChecked) DESC LIMIT 5;
SQL Server 写法
SELECT TOP 5 Asset_ID FROM EmployeeLog WHERE Employee_ID = @Emp_ID AND Asset_ID != '00000000-0000-0000-0000-000000000000' GROUP BY Asset_ID ORDER BY MAX(DateChecked) DESC
Oracle 写法
SELECT Asset_ID FROM EmployeeLog WHERE Employee_ID = @Emp_ID AND Asset_ID != '00000000-0000-0000-0000-000000000000' GROUP BY Asset_ID ORDER BY MAX(DateChecked) DESC FETCH FIRST 5 ROWS ONLY;
注意事项
- 你原有SQL中WHERE条件写的
EmployeeID和表定义的列名Employee_ID不一致,执行前请修正为实际的列名 - 分组后用
MAX(DateChecked)排序是为了保证按每个资产最后一次被检查的时间倒序,符合「最近检查过」的需求
内容的提问来源于stack exchange,提问作者bbb android
相关产品推荐
相关产品推荐

