2017-11-08 5 views
1

MS SQLサーバーを初めて使用しています。データをLHSからRHSに変換するためのクエリを作成したいと思います。結果セットの前の行に基づいて列データを更新する方法

enter image description here

(下図に示すように)Iはherehere所定の回答を参照しているが、理由は同じIDに設定された結果のグループ化の完全クエリを見つけ出すことができませんでした。

ご協力いただきありがとうございます。
ありがとうございます。

答えて

3

あなたは、インデックスを使用して、次と前の行を見つけるために、2 auto joinを使用することができ、from clausegroup by clause

を必要としません。をselect clause

あなただけは次のように特定のルールを実装するためにcase when文を適応させる必要があります(テストしていないが、しかし、アイデアはここにある):

create table RHS as 
select 
    Curr.policy, 
    case 
    when prev.EventDate is null then Curr.policyIssueDate 
    else EventDate 
    end as StartDate, 
    case 
    when next.EventDate is null then CURDATE() 
    else EventDate 
    end as EndDate 
from 
    LHS Curr 
    left join LHS next on 
     Curr.INDEX+1= next.INDEX and 
     Curr.policy = next.policy 
    left join LHS prev on 
     Curr.INDEX-1= prev.INDEX and 
     Curr.policy = prev.policy 

今日の日付の場合:

  • Mysql:CURDATE()
  • SQLServer:getdate()

注:leadlagウィンドウ機能を使用することもできます。

+0

CURDATEはMySQLの関数ですが、ここでは関係ありません – Strawberry

+0

ありがとう@Indent、私は確かにこれを試してみます。私の要件は、同じテーブル内のデータを更新することです。ありがとう。 –

+0

私は、新しい処理済みテーブルを作成して保持します。ありがとう@Indentとイチゴ。 –

関連する問題