sql >> Database >  >> Database Tools >> SSMS

Hoe krijg ik het MAXIMALE tijdsverschil tussen 2 opeenvolgende rijen per waarde?

Kunnen we in plaats daarvan LAG/LEAD gebruiken?

SELECT MAX(diff_sec) FROM
(
  SELECT 
    DATEDIFF(
        SECOND,  
        CreateDT,
        LEAD(CreateDT) OVER(PARTITION BY CODE ORDER BY CreateDT) --next row's createdt
    ) as diff_sec
  FROM Occs
)x

LEAD kiest de volgende CreateDT (de volgende gedefinieerd door "de rij met dezelfde code en de tijdelijk grotere CreateDt na de CreateDT van de huidige rij") relatief aan de huidige rij. DATEDIFF krijgt het verschil in seconden (kies een geschikt tijdsbestek). Het moet worden afgerond in een subquery (of CTE als je dat liever hebt) omdat de vensterfunctie LEAD niet kan verschijnen in een MAX

Het is natuurlijk misschien niet erg handig.. Voeg misschien ook de code toe:

SELECT x.code, MAX(x.diff_sec) FROM
(
  SELECT 
    code,
    DATEDIFF(
        SECOND,  
        CreateDT,
        LEAD(CreateDT) OVER(PARTITION BY CODE ORDER BY CreateDT) --next row's createdt
    ) as diff_sec
  FROM Occs
)x
GROUP BY x.code



  1. Fout bij importeren mysql-database

  2. CREATE TABLE in MySQL-syntaxisfout

  3. Mysql-queryfout alleen in sommige server

  4. Hoe .sql-bestand naar tabellen te converteren in mysql db