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]
- SQL Comment PIVOT table en utilisant l'expression de la table commune et SQL dynamic
- Copier les rôles d'user et la permission d'une database à une autre
- SQL: combiner les loggings avec le même ID de reference
- Une expression de type non boolean spécifiée dans un context où une condition est attendue
- Table de mise à jour SQL Server 2008 avec des valeurs d'une autre table
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 )