1

私の例をもう少しよく説明すると、これは通常、私が探している種類のものです。

これは私が始めているものです:

Column 1 | Column 2
-------------------
    A    |   1
    B    |   2
    A    |   3 

次のいずれかで終了したいと思います。

1) テーブル内のデータが少なくなるため、これが望ましいですが、絶対に必要というわけではありません。

Column 1 | Column 2
-------------------
    A    |   3
    B    |   2 

2)

Column 1 | Column 2
-------------------
    A    |   3
    B    |   2
    A    |   3 

もう少しわかりやすく説明すると、大量のデータを含むテーブルがあります。ユーザーはいつでもデータをインポートできます。問題は、一部のエントリが時々更新されることです。その場合、最後に追加されたデータの状態に関係なく、テーブル内のすべてのエントリを更新する必要があります。たとえば、元の A の値が 1 で、後で A の値が 3 であるというエントリでテーブルが更新された場合、テーブル全体を更新して、A の値が 3 のみであることを示す必要があります。

また、クエリでこれを行う方法は知っていますが、テーブルで行う必要があります。今、私はいくつかのアイデアを考えていますが、どれもうまくいかないようです。次の行に沿って更新クエリを試しました。

"UPDATE tblData SET column2 = Last(Column2) GROUP BY Column1"

しかし、これは実際には機能していないようです。私も試しました:

"UPDATE tblData Set Column2 = DLast('Column2', 'tblData')" 

これははるかに近いです。ただし、最後のレコードですべてのエントリを次のように更新しています。

Column 1 | Column 2
-------------------
    A    |   3
    B    |   3
    A    |   3 

これは、Column1 の各インスタンスに対してのみ実行するように指示する「GROUP BY」句がないためだと推測していますが、調査によると、「GROUP BY」を「UPDATE」に入れることはできないようです。声明。探している結果を得るには、これにどのようにアプローチすればよいですか?

編集: また、これについて 100% 確信があるわけではありませんが、これを解決する方法は、DLast の 3 番目のオプション パラメーターである [criteria] パラメーターを使用することだと思います。これを使用する唯一の方法は、Column1 の正確な値を指定することです。そのため、ここで使用する方法がわかりませんが、それを操作して個々の値に適用する方法が必要だと思いますColumn1 の。

4

1 に答える 1

0

KryptKeeper - HansUp の回答に対して、column2 への更新は必ずしもより高い数値であるとは限りませんか? そうでない場合、 max(column2) は機能しません。テーブルがカウンターなのか、アキュムレーターなのか、そのようなものなのかについては言及していません。更新されたレコードの値が 2 列目でも下がる可能性がある場合は、代わりに datetime 列の max() を取得できるように、datetime スタンプを追加の列として保持する必要がある場合があります。

于 2012-08-16T14:57:20.810 に答える