0

次の表があります。特定のProd_IDの最大のTransaction_IDについて、Check_StatusをCompletedから'NotCompleted'に更新する必要があります。

Tran_ID     Prod_ID    Check_Status
-------     --------   ------------
107893      XA         Completed
107892      XA         Completed
107891      XA         Completed
107890      XB         Completed
107889      XB         Completed
107888      YC         Completed
107887      YC         Completed
107886      YC         Completed
107885      YC         Completed

結果は次のように表示されます。つまり、製品IDXAのトランスIDは107893として最大であり、「未完了」として更新する必要があります。残りのものは変更しないでください。他の製品IDXBおよび。についても同様ですXC

Tran_ID    Prod_ID     Check_Status
-------    --------    ------------
107893     XA          Not-Completed
107892     XA          Completed
107891     XA          Completed
107890     XB          Not-Completed
107889     XB          Completed
107888     YC          Not-Completed
107887     YC          Completed
107886     YC          Completed
107885     YC          Completed
4

3 に答える 3

3

これには CTE を使用できます。

;with cte as
(
  select tran_id, prod_id,
    row_number() over(partition by prod_id order by tran_id desc) rn,
    check_status
  from yourtable
) 
update  cte
set check_status = 'Not-Completed'
where rn = 1

SQL Fiddle with Demoを参照してください

于 2012-09-18T12:09:49.323 に答える
1
     UPDATE Transactions set 
    Check_Status= 'Not completed' 
     where Tran_ID IN (
        Select MAX(Tran_ID) as Tran_ID from 
Transactions Group by Prod_ID)
于 2012-09-18T12:05:33.820 に答える
1
UPDATE tablename t1 
SET t1.Check_Status = 'Not-Completed'
WHERE t1.TranId IN 
    (
       SELECT Max(Tran_ID) 
       FROM Tablename t2 
       GROUP BY Prod_ID
    )
于 2012-09-18T12:06:25.547 に答える