1

2つのテーブルcomputersとがありsoftwareinstallsます。

コンピューターの主キーはcomputeridであり、softwareinstallsには​​3つのフィールド(installid、computerid、およびlastmodifieddate)があります。

ソフトウェアは、computers.computeridに結合されたcomputeridをインストールします。

最終更新日がそのコンピューターの最大値の1日以上前のコンピューター上のすべてのソフトウェアインストールを削除しようとしているので...

ソフトウェアインストールテーブル

install  computerid  lastmodifieddate
1        1           01-16-13
2        1           01-16-13
3        1           01-14-13
4        2           01-12-13
5        2           01-10-13

レコード3と5を削除します。SQLサーバーのクエリは何でしょうか。

4

1 に答える 1

1

削除ステートメントに参加できます。これで使用LEFT JOINします。

DELETE  a
FROM    softwareinstalls a
        LEFT JOIN
        (
            SELECT computerID, max(lastmodifieddate) max_date
            FROM softwareinstalls
            GROUP BY computerID
        ) b ON a.computerID = b.computerID AND
                a.lastmodifieddate = b.max_date
WHERE   b.computerID IS NULL

パフォーマンスを向上させるには、列computerIDとにインデックスを追加しますlastmodifieddate

于 2013-01-17T02:38:22.653 に答える