Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Requête SQL pour les intervalles de temps. Erreurs de syntaxe.

Vous ne pouvez pas utiliser le JOIN comme ça, vous devez utiliser soit CROSS APPLY ou OUTER APPLY (en supposant SQL Server). Veuillez également ajouter de la longueur aux varchars. Maintenant, essayez ceci :

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;

Voici une démo à vous d'essayer.