Requête SQL pour get DateDiff des deux derniers loggings

J'ai une table appelée Event avec eventNum en tant que key primaire et date en tant que datetime2 (7) dans SQL Server 2008 R2. J'essaie d'get la date des deux dernières rangées dans le tableau et d'get la différence en minutes. C'est ce que j'ai actuellement:

Select DATEDIFF(MI, e.date,(Select e2.date from Event e2 where eventNum = (Select MAX(e2.eventNum)))) From Event e Where eventNum = (Select MAX(e.eventNum)-1 from e) 

et j'ai cette erreur:

Nom de colonne non valide 'Select eventNum from Event où eventNum = Sélectionnez MAX (eventNum) depuis Event'.

J'ai changé cela 100 fois et je n'arrive pas à le faire fonctionner. De l'aide?

    Vous pouvez utiliser ROW_NUMBER

     WITH CTE AS ( SELECT RN = ROW_NUMBER() OVER (ORDER BY eventNum DESC) , date FROM Event ) SELECT Minutes = DATEDIFF(minute, (SELECT date FROM CTE WHERE RN = 2), (SELECT date FROM CTE WHERE RN = 1)) 

    Fiddle: http://www.sqlfiddle.com/#!3/3e9c8/17/0

    Cela ne doit pas passer par la table deux fois comme la réponse de Tim.

     select datediff(mi, min(x.date), max(x.date)) from ( select top(2) * from Event e order by eventNum desc ) x 

    entrez la description de l'image ici

    En supposant que vous avez toujours 2 loggings ou plus, et que le time augmente de façon monotone, alors ce qui précède fonctionne.

    • S'il n'a qu'un seul logging, il renvoie 0 (puisque max = min = logging singulier).
    • Si votre time n'augmente pas de façon monotone, il y a un simple tweak à cette requête

    par exemple

     select top(1) datediff(mi, x.date, y.date) from event x join event y on y.eventnum < x.eventnum order by x.eventnum desc, y.eventnum desc