-1

いくつかのテーブルがあり、それらのテーブルを結合して結果をファイナルテーブルに挿入するSQLを作成しました。ファイナルテーブルはtb(account、date)で、accountが主キーです。問題は、次のようなクエリの結果に起因していました。

account     date
0001        09/01/2012
0001        09/02/2012
0002        09/01/2012
0003        09/03/2012

これらの結果レコードの上に挿入すると、VIolation ofPRIMARYKEY制約エラーが発生しました。クエリを修正するにはどうすればよいですか。次のような結果レコードを取得できます。

account     date
0001        09/02/2012 (get the latest date)
0002        09/01/2012
0003        09/03/2012

ありがとう。

4

3 に答える 3

2

どうですか

INSERT INTO SomeOtherTable (account, DATE)
SELECT account,
MAX(date)
FROM YourTable
GROUP BY account

テーブルスキーマ、元のクエリ、およびsoemサンプルデータを表示する場合は、はるかに理にかなっています。

于 2012-09-25T18:01:18.660 に答える
0

重複を防ぐために、DISTINCTまたはをクエリに追加できます。GROUP BYファイナルテーブルにこの母集団の前にすでにいくつかのデータがある場合は、相関を追加することもできますNOT EXISTS。例えば:

INSERT dbo.FinalTable(account, [date])
  SELECT account, [date] FROM 
  (
     SELECT account, MAX([date])
       FROM --... your join here
       GROUP BY account
  ) AS src (account, [date])
  WHERE NOT EXISTS 
  (
     SELECT 1 
       FROM dbo.FinalTable 
       WHERE account = src.account
       AND [date]  = src.[date]
  );

dateまた、列にもっと意味のある(そして予約されていない)単語を使用することを検討してください。

申し訳ありませんが編集(get the latest date)、ビットを逃した。

于 2012-09-25T18:00:38.220 に答える
-1

ORDER BY date DESC GROUP BY account挿入するときに必要だと思います。ただし、すでに0001がテーブルにある場合は、これだけでは機能しません。

存在しないレコードを挿入してから、既存のレコードを更新する必要があります(必要な場合)

于 2012-09-25T18:02:55.180 に答える