您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

从每个组中选择最上面的1行

从每个组中选择最上面的1行

您没有指定要如何处理关系,但是如果要显示重复项,将这样做。

SELECT a.* FROM MyTable a
LEFT JOIN MyTable b
  ON a.userid=b.userid
 AND CAST(a.version AS INT) < CAST(b.version AS INT)
WHERE b.version IS NULL

要使用进行测试的SQLfiddle

如果您要消除重复项,并且如果存在重复项,请选择最新的重复项,则必须对查询进行某种程度的扩展;

WITH cte AS (SELECT *, CAST(version AS INT) num_version FROM MyTable)
SELECT a.id, a.userid, a.version, a.datetime 
FROM cte a LEFT JOIN cte b
  ON a.userid=b.userid
 AND (a.num_version < b.num_version OR 
     (a.num_version = b.num_version AND a.[datetime]<b.[datetime]))
WHERE b.version IS NULL

另一个SQLfiddle

其他 2022/1/1 18:50:25 有467人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶