Supprimer toutes les lignes sauf 1 la plus récente

Voulez-vous supprimer toutes les lignes de la table sauf 1 qui est la plus récente.

Cette requête fonctionne correctement avec SQL Server 2008 Standard Edition:

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

Mais échoue sur SQL Server Compact Edition 3.5

Une erreur est survenue lors de l'parsing de la requête.
[Numéro de ligne de jeton = 1, Décalage de ligne de jeton = 11, Jeton en erreur = FROM]

Quel est l'équivalent pour l'édition Compact?

MODIFIER

Conception de table http://pastebin.com/Akwpypkm

Votre instruction de suppression semble avoir une erreur de syntaxe, essayez de modifier la requête

 DELETE S1 FROM ... 

à

 DELETE FROM ... 

METTRE À JOUR:

Essayez cette déclaration en rlocation du vôtre:

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

Aussi juste un avertissement que vous pouvez avoir des problèmes avec les opérations d'insertion / mise à jour sur la table en fonction du schéma que vous avez fourni car votre key primaire est plus grande que le maximum: http://msdn.microsoft.com/fr-fr/ bibliothèque / ms191241 (v = sql.105) .aspx

Cela pourrait causer des échecs d'exécution mystérieux dans votre application.

essayez quelque chose comme ça,

 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 

MISE À JOUR 1

 DELETE FROM [StateLogs] WHERE NodeID NOT IN ( SELECT NodeID FROM ( SELECT NodeID, MAX([Modified]) maxDate FROM [StateLogs] GROUP BY NodeID ) s )