Sql 根据是否为最新条目更新数据库中的表字段

Sql 根据是否为最新条目更新数据库中的表字段,sql,tsql,Sql,Tsql,我有一张桌子,里面有一些复制品 我不想删除重复项,但我想在一些不是最新条目的记录上设置一个指示器,最高的reviewid是最新的 我的表格如下: ReviewId |ClientID | CommunicationSent 17023| 1950943 | 0 17202| 1950943 | 0 17734| 1950943 | 0 17731| 1948031 | 0 16822| 1948031 | 0 15300|

我有一张桌子,里面有一些复制品

我不想删除重复项,但我想在一些不是最新条目的记录上设置一个指示器,最高的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
例如,我想将“communicationstart”设置为1,其中clientid=1948031,而不是最新的,即,最高的设置communicationId为1,其中reviewid=16822和15300

我猜这将是reviewid不是maxreviewid的地方

有人知道怎么做吗

谢谢,

请尝试:

;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

我认为此更新将为您提供:

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

我认为这应该做到:

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

样本

我建议不要。您可以选择最新的值,今天更新的内容明天可能会出错。谢谢@jpw。我相信这项工作,但已经看到了另一个早些时候已经尝试过了。