0

タイムスタンプ付きのエントリが多数あるテーブルがあります (「DATED」という名前のタイムスタンプ列)。

DATED 列の最後の 24 の異なる日付より古いテーブルから古いエントリを定期的に削除したいと考えています。

だから私は節が解決する場所の削除クエリを作成しようとしています (DATED < [DATED からの 24 番目の個別の日付])

x 日より古いレコードを削除するクエリを設計したくありません。古いレコードであっても、そのテーブルで常に 24 のレコード セットを保持する必要があります。

何か提案はありますか?

4

2 に答える 2

3

の助けを借りてCoomon Table ExpressionWindow Functionあなたが望むものを手に入れることができます。

SQL Server 2005 の場合

WITH recordList
AS
(
    SELECT  *,
            DENSE_RANK() OVER (PARTITION BY convert(varchar(20), DATED, 102)
                                ORDER BY DATED DESC) rn
    FROM    TableName
)
DELETE FROM recordList
WHERE rn > 24

SQL Server 2008 以降の場合

WITH recordList
AS
(
    SELECT  *,
            DENSE_RANK() OVER (PARTITION BY CAST(DATED AS DATE)
                                ORDER BY DATED DESC) rn
    FROM    TableName
)
DELETE FROM recordList
WHERE rn > 24
于 2013-04-04T13:49:13.857 に答える