Mysql
 sql >> Datenbank >  >> RDS >> Mysql

ERROR 1064 (42000) Datenbankfehler in der Syntax von over partition by

Fensterfunktionen (wie lead() ) wurden nur in MySQL 8.0 hinzugefügt, daher sind sie in Version 5.7 nicht verfügbar. Sie können lead() emulieren mit einem Self-Join wie folgt:

select t.*, tlead.state, tlead.timestamp
from FinalTable t
left join FinalTable tlead 
    on tlead .id = t.id
    and tlead.timestamp = (
        select min(t1.timestamp) 
        from FinalTable t1 
        where t1.id = t.id and t1.timestamp > t.timestamp
    )

Nebenbemerkung:Damit diese Methode ordnungsgemäß funktioniert, benötigen Sie nachfolgende Datensätze derselben id um einen anderen timestamp zu haben s - was in den Beispieldaten, die Sie gezeigt haben, nicht der Fall ist, wo alle Zeitstempel gleich sind (ich nehme an, das ist ein Tippfehler in Ihren Beispieldaten).