让我们假设下表:
Name SubName Message Time USA MA M1 1 USA NY M2 2 USA WA M3 3 USA MA M4 4 USA WA M5 5 USA NY M6 6 FIN HEL M7 7 FIN TAM M8 8 FIN HEL M9 9
Name SubName Message Time FIN HEL M9 9 FIN TAM M8 8 USA NY M6 6 USA WA M5 5 USA MA M4 4
所以一个ORDER BY时间DESC,它由不同的名称分组,并由不同的子名称进行分组.
这可能吗?我正在寻找一种不是DBMS特定的解决方案 – 可以在大多数所有DBMS中运行.
解决方法
您没有标记您的RDBMS,因此对于应用于大多数RDBMS的ANSI-sql,您可以使用ROW_NUMBER():
SELECT s.* FROM ( SELECT t.*,ROW_NUMBER() OVER(PARTITION BY t.name,t.subname ORDER BY t.time DESC) as rnk FROM YourTable ) s WHERE s.rnk = 1 ORDER BY s.time DESC,s.name
编辑:这是一个核心ANSI sql的答案,应该在任何数据库上工作,你可以使用NOT EXISTS():
SELECT * FROM YourTable t WHERE NOT EXISTS(SELECT 1 FROM YourTable s WHERE t.name = s.name and t.subname = s.subname AND s.time > t.time)