2017-02-23 25 views
1

我有這樣更新基於其組的最低值的表中的所有行

Date----- ----------Value--------- Group <br> 
2017-01-01--------10--------------1--<br> 
2017-01-02---------9---------------1--<br> 
2017-01-03 --------5---------------2--<br> 
2017-01-04 --------4---------------2--<br> 

我想更新表中的所有值列,使得它在設置最小日期的值表組

這樣

Date----- ----------Value--------- Group <br> 
2017-01-01--------10--------------1--<br> 
2017-01-02---------10---------------1--<br> 
2017-01-03 --------5---------------2--<br> 
2017-01-04 --------5---------------2--<br> 

回答

0

在這裏,你走了,2分查詢時,先計算每組分鐘時間再加入回原來的表,以獲得相關值。後來終於加入這個原始表更新所有相關聯基團與價值:

UPDATE M SET M.Value = RESULT.Value FROM MyTable M 
INNER JOIN (
    SELECT MV.Group, M.Value FROM MyTable M 
    INNER JOIN (
     SELECT MIN(Date) as MinDateValue, Group FROM MyTable 
     GROUP BY Group 
      ) MV ON MV.MinDateValue = M.Date AND MV.Group = M.Group 
) RESULT ON RESULT.Group = M.Group 
+0

嗨..感謝您的答覆..但我需要更新最小日期的價值,而不是最小值.. –

+0

@AbijithDas檢查我的編輯,這正是查詢做什麼 – CSL

0
First get min date and value from sub query.Based on this result update main table 

CREATE TABLE #Table(_Date Date,value INT,_Group INT) 

INSERT INTO #Table(_Date ,value ,_Group) 
SELECT '2017-01-01',10,1 UNION ALL 
SELECT '2017-01-02',9,1 UNION ALL 
SELECT '2017-01-03',5,2 UNION ALL 
SELECT '2017-01-04',4,2 

UPDATE #Table SET value = _Output._Value 
FROM 
(
    SELECT A._Date , A._Group , T.value _Value 
    FROM #Table T 
    JOIN 
    (
    SELECT MIN(_Date) _Date ,_Group 
    FROM #Table 
    GROUP BY _Group 
) A ON A._Date = T._Date 

) _Output WHERE _Output._Group = #Table._Group 

SELECT * FROM #Table 
0

你也可以使用一個CTE

查詢

;with cte as(
    select [rn] = row_number() over(
     partition by [Group] 
     order by [Date] 
    ), * 
    from [your_table_name] 
) 
update t1 
set t1.[Value] = t2.[Value] 
from cte t1 
join cte t2 
on t1.[Group] = t2.[Group] 
and t1.[rn] > t2.[rn]; 
相關問題