sql-server - 选择一个预定义的最大值
问题描述
我有一张表格,里面有我的用户数据。
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 的用户。
解决方案
您可以使用窗口函数返回每个用户的最后一个条目,如下所示
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 |
推荐阅读
- php - 如何在return语句中编写循环?
- python - (Python) 在线程中关闭 pygame.display
- mysql - SQL查询查找在某些2日期增加值的所有产品
- php - 单个 PHP 文件,可以擦除包含子文件夹的文件夹内的所有内容以及文件本身
- python - 如何转换类型”
" 在 python 中听写 - javascript - 两个不同数组的 addEventListener - forEach -代码优化
- python - LightGBM - sklearnAPI 与训练和数据结构 API 以及 lgb.cv 与 gridsearchcv/randomisedsearchcv
- angular - 如何将 promise.all 转换为 observables
- react-native - 如何将 .gif 文件添加到 EXPO 斜线屏幕
- corda - 出现计数器流错误:从验证公证人更改为非验证公证人时