2011-12-08 13 views
1

[更新値]、[日付]、[時刻]、[電話番号]、および整数自動番号/主キー列の列を持つテーブルがあります。グループ化されたデータを増分でSQLで更新する

日付と電話番号をグループ化するように(つまり、2つ以上のレコードが同じ日付と電話を持つ場合、それらは「グループ」の一部です)、テーブルをセットとして更新したいですがそのグループの最も早い時間レコードに "1"を、グループの次の最も早い時間レコードのために "2"を入れます。

グループのカウントだけで更新するのは簡単ですが、時間のソートに基づいて増分値で各グループを更新する方法を見つけようと壁を打つ。

+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 
関連する問題