1

MS アクセス SQL

DELETE * 
FROM Lane_Details
WHERE Lane_Details.Week not in(SELECT DISTINCT TOP 3 Lane_Details.Week
           FROM Lane_Details
WHERE Lane_Details.Week IS NOT NULL
ORDER BY Week DESC; )

望ましい結果

私がこれを行う必要があるのは、テーブルから 4 週間以上経過したものをすべて削除することです。

アクセスが完全にロックされてしまいます。これの正しい構文がどうあるべきかわかりません。また、左外部結合を使用して記述できることはわかっていますが、その方法がわかりません。

データ

ID            Lane  Time                        Week
6213214 83198524    4/6/2012 12:31:00 AM    201315
6213183 61780698    4/6/2012 12:31:00 AM    201311
6213201 11145552    4/6/2012 12:31:00 AM    201315
6213202 82391025    4/6/2012 12:31:00 AM    201314
6213203 11149012    4/6/2012 12:31:00 AM    201311
6213204 11140048    4/6/2012 12:31:00 AM    201311
6213205 83198524    4/6/2012 12:31:00 AM    201316
6213207 61625652    4/6/2012 12:31:00 AM    201316
6213210 61625652    4/6/2012 12:31:00 AM    201311
6637195 36166433    5/1/2012 8:25:00 AM           201314
6637206 77222091    5/1/2012 10:50:00 AM    201314

このデータを使用して、週 201311 を含むすべての行を削除します。201314、201315、および 201316 を保持します。

サブクエリはこのテーブルで実行され、この場合は上位 3 つの日付 (14、15、16) を取得します。次に、「参加しない」と言って、11 をすべて削除します。

4

4 に答える 4

1

Thanks for all of the help. I finally realized that it wasn't my query, it just ran really slow. I think it was a performance issue. I decided to break the query down into a few different ones. It is working much better now. i eventually found this website and came to that conclusion.

VBA isnt the best place to do sub queries.

于 2012-07-25T18:06:01.110 に答える
0

これを行うために必要なのは、4週間以上前のテーブルからすべてを削除することです。

あなたは次のようなことをすることはできません:-

DELETE * FROM Lane_Details where Week<=datepart("yyyy",dateadd("w",-4,now())) & datepart("ww",dateadd("w",-4,now()))

Weekを文字列に変換する必要があるかもしれませんが、それでうまくいきます。

于 2012-07-24T15:05:38.507 に答える
0

サブクエリ内のセミコロンを削除し、週フィールドにインデックスを作成してください。クエリは正常に動作するはずです。

于 2012-07-24T15:33:43.353 に答える
0

削除時に Access が WHERE 句の自己参照をどの程度うまく処理するかはわかりません。ただし、サブクエリを回避するために、代わりに次のようなことを行うことができます。

DELETE FROM Lane_Details
WHERE Week <= (THIS WEEK - 4 WEEKS)

ここで、「THIS WEEK - 4 WEEKS」は、行を削除する前の終了日を表す適切な式です。

于 2012-07-24T14:29:43.843 に答える