更新最后一张卡状态声明

时间:2016-06-12 01:20:31

标签: sql oracle sql-update dml

我有一张cardstatus卡:1(开放)

我有另一张cardstatus卡:2(已关闭)

我经营一项工作,在cardstatus上制作两张牌:3(暂停)

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

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

卡表有cardstatus(当前状态)

cardaudit表有cardstatus(流行的卡状态)

cardaudit表中的 max(cardauditid)将始终是laststatus ---这是我想要的而不是所有卡到活动状态

卡和cardaudit表共有cardstatus

我想写:

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

更新!!!

我得到了答案。

1 个答案:

答案 0 :(得分: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