0

一時テーブル#tbl(account、last_update)を作成します。最終更新日のアカウントを挿入するために、異なるソース(異なるデータベースのテーブルである可能性があります)からの次の2つの挿入があります。例えば

create table #tbl ([account] numeric(18, 0), [last_update] datetime)

insert into #tbl(account , last_update)
select table1.account, max(table1.last_update)
from table1 join…
group by table1.account

insert into #tbl(account , last_update)
select table2.account, max(table2.last_update)
from table2 join…
group by table2.account

問題は、これによりテーブル#tblでアカウントが重複する可能性があることです。各挿入中にそれを回避するか、両方の挿入後に重複を削除する必要があります。また、2つの異なるlast_updateを持つアカウントがある場合は、#tblに最新のlast_updateを設定する必要があります。この条件付き挿入を実現するにはどうすればよいですか?どちらがより良いパフォーマンスを発揮しますか?

4

2 に答える 2

1

クエリを次のように書き直すことができると思いますか。

create table #tbl ([account] numeric(18, 0), [last_update] datetime)

insert into #tbl(account , last_update)
  select theaccount, MAX(theupdate) from 
  (
    select table1.account AS theaccount, table1.last_update AS theupdate
    from table1 join…
     UNION ALL
    select table2.account AS theaccount, table2.last_update AS theupdate
    from table2 join…
   ) AS tmp GROUP BY theaccount 

UNION ALLは、table1+table2レコードを組み合わせた1つの一意のテーブルを作成します。そこから、通常のテーブルであるかのように動作できます。つまり、「groupby」を使用して各レコードの最大last_updateを見つけることができます。

于 2012-09-28T20:19:39.553 に答える
0
#tbl(account、last_update)に挿入します
  アカウントを選択、last_update
     から
      ((
    #table1からa。*を選択します。
     last_update in(#table1からトップ1のlast_updateを選択b
      どこ
        a.account = b.account
         last_updateによる注文desc)
         連合
    #table2からa。*を選択します。
     last_update in(#table2からトップ1のlast_updateを選択b
      どこ
        a.account = b.account
         last_updateによる注文desc)
      )AS tmp
于 2012-09-30T13:27:52.767 に答える