首页 > 解决方案 > 选择一个预定义的最大值

问题描述

我有一张表格,里面有我的用户数据。

ID 姓名 版本号
1 名称 A 1
2 名称 B 2
3 名字 C 1
4 名称 A 2
5 姓名 E 1
6 姓名 F 3
7 姓名 G 2
8 名字 C 4
9 名称 A 5

还有第二个表,我代表每个用户所在的版本:

ID 版本
1 1.2
2 1.3
3 1.4
4 1.5
5 1.6

我在编写查询以返回当前版本为 1.3 的用户时遇到问题。如果用户在某个时候已经拥有 1.3 版,但目前已不在其中,则不应选择此值。随着时间的推移,用户可以转换多个版本。在查询中,我只想要当前使用 1.3 版的用户。也就是说,只有 ID 为 2 和 7 的用户。

标签: sql-serverselectmax

解决方案


您可以使用窗口函数返回每个用户的最后一个条目,如下所示

SELECT
    x.Id, x.Name
FROM (SELECT
          Id,
          Name,
          VersionId,
          ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Id DESC) AS rowNum
      FROM UserData) x
      INNER JOIN VersionData v
          ON x.VersionId = v.Id
WHERE
    x.rowNum = 1 AND
    v.Version = '1.3'

即使用户降级到以前的版本,这也有效。

退货

ID 姓名
2 名称 B
7 姓名 G

见:http ://sqlfiddle.com/#!18/93a572/15/0


推荐阅读