N列のテーブルがあります。c1
それらを , c2
, c3
, c4
, ...と呼びましょうcN
。COUNT DISTINCT(cX)
複数の行のうち、[1, N] の各 X で単一の行を取得したい。
c1 | c2 | ... | cn
0 | 4 | ... | 1
すべての列名を手動でクエリに書き込むことなく、(ストアド プロシージャで) これを行う方法はありますか?
なんで?
アプリケーション サーバーのバグが原因で、適切な列の値を書き直し、後でガベージを挿入するという問題がありました。これを解決するために、各行が論理UPDATE
クエリを表す情報ログ構造を保存しています。次に、記録が完了したというシグナルが与えられると、値が (誤って) 上書きされたかどうかを判断できます。
複数の行にある 1 つの正しいレコードの例: 各列に多くても 1 つの値があります。
| id | initialize_time | start_time | end_time |
| 1 | 12:00am | NULL | NULL |
| 1 | 12:00am | 1:00pm | NULL |
| 1 | 12:00am | NULL | 2:00pm |
Reconciled row:
| 1 | 12:00am | 1:00pm | 2:00pm |
検出したい相容れないレコードの例:
| id | initialize_time | start_time | end_time |
| 1 | 12:00am | NULL | NULL |
| 1 | 12:00am | 1:00pm | NULL |
| 1 | 9:00am | 1:00pm | 2:00pm | -- New initialize time => irreconcilable!