更新数据库中的表字段取决于它是否是最新条目

时间:2013-12-03 12:38:54

标签: sql tsql

我有一张桌子,并且有一些重复的内容。

我不想删除重复项,但我想在一些不是最新条目的记录上设置一个指标(最高的reviewid是最新的)

我的表格如下:

ReviewId |ClientID | CommunicationSent      
17023|  1950943 | 0     
17202|  1950943 | 0     
17734|  1950943 | 0     
17731|  1948031 | 0     
16822|  1948031 | 0     
15300|  1948031 | 0     
14722|  1945039 | 0     
16125|  1945039 | 0     
17729|  1945039 | 0     
17727|  1943172 | 0     
14552|  1943172 | 0     
17179|  1943172 | 0     
15175|  1943172 | 0

例如,我想将'communicationset'设置为1,其中clientid = 1948031并且它不是最新的,即最高设置的communationid为1,其中reviewid = 16822和15300。

我猜测它将是一个不是maxid(reviewid)的地方。

任何人都知道如何做到这一点?

谢谢,

3 个答案:

答案 0 :(得分:2)

我认为应该这样做:

update table1 set CommunicationSent = 1 
where reviewid not in (
  select max(reviewid) from table1 group by clientid
)

示例SQL Fiddle

答案 1 :(得分:0)

请尝试:

;with T as(
    select *, 
           ROW_NUMBER() over (partition by ClientID order by ReviewId desc) RNum
    from YourTable
)
update T 
set CommunicationSent=1 
where RNum<>1

答案 2 :(得分:0)

我认为此更新将为您完成:

UPDATE T
SET communicationSent = 1
FROM TABLE T
INNER JOIN (
    SELECT MAX(reviewId) AS 'reviewId',
        clientID
    FROM TABLE
    GROUP BY clientID
    ) T2
    ON T.clientId = T2.clientId
        AND T.reviewId < T2.reviewId