Je suis en train d'écrire une requête pour Visual Studio 2012 et de la tester dans Microsoft SQL Server Management Studio à l'aide de SQL Server 2008 R2.SQL DATEADD renvoyant des résultats incorrects
Pour l'instant, j'ai lu l'article de MSDN sur datetimes et DATEADD, mais il semble que ma syntaxe soit correcte. J'ai également lu quelques trucs sur Google ainsi que How to select last one week data from today's date et MySQL: DATE_ADD ainsi que quelques autres articles Stack Overflow.
La requête que je suis en cours d'exécution au moment est vraiment simple, il suffit:
SELECT [DateTime] AS 'Time'
,[RawStatus] AS 'Data'
FROM [ADatabase].[dbo].[SomeTable]
WHERE CustomPollerAssignmentID = '6570267A-22E1-4556-B344-EB27D9831419' --Latency Poller
AND RowID = 000042 --Some Modem Number
AND DATEADD(HOUR, -1, CURRENT_TIMESTAMP) <= DateTime
ORDER BY DateTime DESC
Ce que je m'y attendais à faire était de retourner les données (latence du réseau dans ce cas) pour la dernière heure. Au lieu de cela, il revient les trois dernières heures et trente minutes. Lors de l'exécution du code avec l'instruction DATEADD commentée, il s'exécute très bien et renvoie tout pour le jour ou les deux derniers jours, le temps maximum que cette table stocke les données de latence.
Maintenant, le code étrange ci-dessus est calquée sur ce qui est ci-dessous, que je connais des œuvres:
SELECT NMSDS.[SnapshotTimestamp] AS 'Time'
,[LatencyValue] AS 'Latency'
FROM [ADifferentDatabase].[dbo].[AnotherTable] Late
INNER JOIN ADifferentDatabase.dbo.YetAnotherTable NMSDS ON NMS_Id = 1
AND NMSDS.SnapshotID = Late.SnapshotID
WHERE DATEADD(HOUR, -6, CURRENT_TIMESTAMP) <= NMSDS.SnapshotTimestamp
AND InrouteGroupId = @IRID
AND NetworkId = @NTID
ORDER BY [Late].SnapshotID ASC
Mes questions sont les suivantes:
- Qu'est-ce que je manque?
- Est-ce que j'ai mal formulé ma requête? Et la seconde est pourquoi retournerait-il 3,5 heures au lieu d'un étant donné que la deuxième requête fonctionne réellement et renvoie les choses correctement?
Pas comme cela ferait une différence, mais je ferais probablement 'NMSDS.SnapshotTimestamp> = DATEADD (HOUR, -6, CURRENT_TIMESTAMP)' car il peut utiliser un index. – Kermit
Oui, j'ai essayé de changer l'ordre dans la requête avant de poster quoi que ce soit, mais cela n'a pas changé le comportement étrange. Aussi, comme je l'ai mentionné ci-dessous (et dans le post), le premier ensemble de code est celui qui produit un comportement étrange. Le second est un exemple de code qui fonctionne réellement en utilisant une syntaxe presque identique. –
Essayez d'appliquer ce filtre sur le jeu de résultats 'NMSDS' en premier. – Kermit