我的表名XYZ有col。姓名: -
id(varchar),
Version(Number),
Authorize_state(Y/N),
Action(Save/Reset/Delete/... etc)
我必须让Authorize_state ='N'的所有版本低于Authorize_state ='Y'的版本 e.g。
Table
ID. Version. Authorize_state Action
1A. 2. N. Save
1A. 3. N. Save
1A. 5. Y. Update
1A. 8. N. Reset
1B. 1. N. DO
1B. 3. Y. Accept
1B. 5. N. Save
1 - 所以现在我必须获得Id 1B的第一版和Id 1A的第2版和第3版 2 - 针对特定id的Y版本将始终是表中的一个。
请帮我写一个sql查询。
答案 0 :(得分:1)
select
id,
min(version) min_v
from xyz
where Authorize_state='Y'
group by id
获取每个id的最小授权版本
select
xyz.*
from xyz
inner join (the query above) sub on xyz.id = sub.id and xyz.version<sub.version
然后加入原始表格,只留下最少只留下版本的版本