3

最新の 1 を除くすべての行をテーブルから削除したい。

このクエリは、SQL Server 2008 Standard エディションで正常に機能します。

DELETE S1 
FROM StateLogs S1, StateLogs S2 
WHERE S1.NodeId = S2.NodeId AND S1.NodeId = {0} AND S1.Modified < S2.Modified

ただし、SQL Server Compact Edition 3.5 では失敗します

クエリの解析中にエラーが発生しました。
[ トークン行番号 = 1、トークン行オフセット = 11、エラーのトークン = FROM ]

コンパクト版に相当するものは何ですか?

編集

テーブルデザインhttp://pastebin.com/Akwpypkm

4

2 に答える 2

4

削除ステートメントに構文エラーがあるようです。からクエリを変更してみてください

DELETE S1 FROM ...

DELETE FROM ...

アップデート:

あなたの代わりとしてこのステートメントを試してください:

DELETE FROM StateLogs WHERE Id NOT IN (SELECT TOP (1) Id FROM StateLogs ORDER BY Modified DESC)

また、主キーが最大値よりも大きいため、指定したスキーマに基づくテーブルに対する挿入/更新操作で問題が発生する可能性があることをお知らせします:http: //msdn.microsoft.com/en-us/ library / ms191241(v = sql.105).aspx

これにより、アプリケーションで不思議なランタイム障害が発生する可能性があります。

于 2012-11-26T05:34:45.907 に答える
0

このようなことを試してください、

DELETE  a
FROM    [StateLogs] a
        LEFT JOIN
        (   
            SELECT NodeID, MAX([Modified]) maxDate
            FROM [StateLogs]
            GROUP BY NodeID
        ) b ON a.nodeID = b.NodeID AND
                a.[Modified] = b.maxDate
WHERE   b.NodeID IS NULL

更新1

DELETE  
FROM    [StateLogs] 
WHERE   NodeID NOT IN
        (
            SELECT NodeID
            FROM
                    (   
                        SELECT NodeID, MAX([Modified]) maxDate
                        FROM [StateLogs]
                        GROUP BY NodeID
                    ) s
        )
于 2012-11-26T05:33:12.420 に答える