0

我有以下数据

Id , TagNo , Revision
100 , 20001 , A
101 , 20001 , B
102 , 20001 , C
103 , 20002 , B
104 , 20002 , A
105 , 20003 , B

我想如果我通过 B 进行修订,我有以下记录

101 , 20001 , B
103 , 20002 , B
105 , 20003 , B

如果我通过 A for Revision 我应该有以下记录

100 , 20001 , A
104 , 20002 , A

如果我通过 C 进行修订,则以下应该是我的结果

102 , 20001 , C
103 , 20002 , B
105 , 20003 , B

我无法使用 TSQl ,任何人都可以帮助我吗?谢谢

4

3 回答 3

2
with cte as (
    select
        Id, TagNo, Revision,
        row_number() over(partition by TagNo order by Revision desc) as rn
    from Table1
    where Revision <= @Revision
)
select Id, TagNo, Revision
from cte
where rn = 1

sql fiddle demo

于 2013-09-21T18:26:36.927 回答
0

你只是在寻找

select * from mytable where Revision = 'A'

或者

select * from mytable where Revision = 'B'

或者

select * from mytable where Revision = 'C'
于 2013-09-21T17:16:31.040 回答
0
;WITH TagGroups as
(
  SELECT
    [TagNo],
    MAX([Revision]) as [Revision]
  FROM Tags
  WHERE [Revision] <= 'A' -- Revision for pass
  GROUP BY [TagNo]
)
SELECT
  t.[ID],
  t.[TagNo],
  t.[Revision]
FROM TagGroups tg
JOIN Tags t
  ON t.[TagNo] = tg.[TagNo]
  AND t.[Revision] = tg.[Revision]
ORDER BY t.[ID]
于 2013-09-21T18:25:21.580 回答