2011-12-08 38 views
1

我有一個包含[更新值],[日期],[時間],[電話號碼]和整數自動編號/主鍵列的列表。帶有增量的分組數據的SQL更新

我想將表格更新爲一組,以便將日期和電話號碼分組在一起(即,如果兩個或更多記錄具有相同的日期和電話,則它們是「組」的一部分),但是然後在該組的最早時間記錄中放置一個「1」,然後在該組的最早時間記錄中輸入「2」,等等。

只更新組的計數很簡單, m試圖找出如何使用基於時間排序的增量值更新每個組的牆。

+0

您使用的是什麼RDBMS /版本? –

+0

SQL Server 2005或2008。 – milkboneUnderwear

回答

2
UPDATE yt 
    SET [update value] = q.RowNum 
     FROM YourTable yt 
      INNER JOIN (SELECT PKColumn, 
           ROW_NUMBER() OVER(PARTITION BY [date], [phone number] ORDER BY [time]) AS RowNum 
          FROM YourTable) q 
       ON yt.PKColumn = q.PKColumn; 

你也可以用CTE做到這一點:

WITH cteRowNum AS (
    SELECT [update value], 
      ROW_NUMBER() OVER(PARTIION BY [date], [phone number] ORDER BY [time]) AS RowNum 
     FROM YourTable 
) 
UPDATE cteRowNum 
    SET [update value] = RowNum; 
1

看一看的ROW_NUMBER()函數,例如

SELECT 
    Date, 
    PhoneNumber, 
    Time, 
    ROW_NUMBER() OVER (PARTITION BY Date, PhoneNumber ORDER BY Time ASC) AS IndexInGroup 
    FROM 
    MyTable 
1

此行將創建您正在查找的數字。

ROW_NUMBER() OVER (PARTITION BY [phone number], [date] ORDER BY [date] ASC) Time_Sequencer