2016-06-12 34 views
0

我有一个卡cardstatus:1(开)去年卡状态更新语句

我有另外一个卡cardstatus:2(关闭)

我运行一个作业,使双方的卡上cardstatus:3(保留)

现在,我想写一个更新语句,它将两张卡设置为它们以前的状态。我只给了你1张和1张卡片作为例子。

实际上有1000张卡片,显然我不想编写那么多的更新语句,我不想​​更改当前的代码。目前,update语句中的逻辑将所有保持卡(cardstatus 3)置于活动状态(cardstatus 1)。

卡表具有cardstatus(当前状态)

cardaudit表有cardstatus(prevous卡状态)

MAX(cardauditid)在cardaudit表将永远是laststatus ---这就是我想要的,而不是所有卡的工作状态

卡和cardaudit表有cardstatus共同

我想写:

update card set cardstatus = (some query to get the previous status) 

更新!

我得到了答案。

+0

样本数据和预期的结果真的会澄清一下你正在尝试做的。 –

+0

请参阅上面....我提供了示例数据。 – Amir

回答

0

这将是更容易的样本数据,但仍:

create table credit (tid int, stat varchar(10)) 

insert into credit values (1,'hold'),(2,'hold') 

create table creditaudit (id int identity, tid int, stat varchar(10)) 

insert into creditaudit (tid, stat) 
values (1,'open'), (1,'close'), (2,'open'), (1,'active'), (2,'close') 

select * from credit 
select * from creditaudit 

;with cte 
as (select tid, stat, row_number() over(partition by tid order by id desc) rn 
    from creditaudit) 
select * from credit 
    join cte on credit.tid = cte.tid 
where rn = 1 
+0

请问你能接受答案吗? –