1
MS SQLサーバーを初めて使用しています。データをLHSからRHSに変換するためのクエリを作成したいと思います。結果セットの前の行に基づいて列データを更新する方法
(下図に示すように)Iはhereとhere所定の回答を参照しているが、理由は同じIDに設定された結果のグループ化の完全クエリを見つけ出すことができませんでした。
ご協力いただきありがとうございます。
ありがとうございます。
MS SQLサーバーを初めて使用しています。データをLHSからRHSに変換するためのクエリを作成したいと思います。結果セットの前の行に基づいて列データを更新する方法
(下図に示すように)Iはhereとhere所定の回答を参照しているが、理由は同じIDに設定された結果のグループ化の完全クエリを見つけ出すことができませんでした。
ご協力いただきありがとうございます。
ありがとうございます。
あなたは、インデックスを使用して、次と前の行を見つけるために、2 auto join
を使用することができ、from clause
にgroup 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
今日の日付の場合:
注:lead
とlag
ウィンドウ機能を使用することもできます。
CURDATEはMySQLの関数ですが、ここでは関係ありません – Strawberry
ありがとう@Indent、私は確かにこれを試してみます。私の要件は、同じテーブル内のデータを更新することです。ありがとう。 –
私は、新しい処理済みテーブルを作成して保持します。ありがとう@Indentとイチゴ。 –