Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL-Abfrage für Zeitintervalle. Syntaxfehler.

Sie können den JOIN nicht verwenden so müssen Sie entweder CROSS APPLY verwenden oder OUTER APPLY (unter der Annahme von SQL Server). Bitte fügen Sie auch Länge zu varchars hinzu. Versuchen Sie jetzt Folgendes:

SELECT r.user_id, r.reading_time start_time, rm.reading_time end_time, 
       (CONVERT(varchar(10), r.x)+' ; '+CONVERT(varchar(10), r.y)) start_point, 
       (CONVERT(varchar(10), rm.x)+' ; '+CONVERT(varchar(10), rm.y)) end_point 
FROM Readings r 
OUTER APPLY (SELECT TOP 1 r2.user_id, r2.reading_time, r2.x, r2.y
             FROM Readings r2
             WHERE r2.user_id=r.user_id and 
                   r2.reading_time < r.reading_time
             ORDER BY r2.reading_time desc) rm 
ORDER BY 1,2 desc;

Hier ist eine Demo zum Ausprobieren.