SQL Server: filter uniquement pour les lignes directement après une ligne contenant un text spécifique

J'ai un tableau avec les colonnes suivantes

application_uuid changed_at_utc changed_by name 

Je voudrais sortinger par application_uuid et changed_at_utc . Ensuite, je veux filterr seulement pour les lignes qui viennent directement après les lignes où application_status a le text 'Ready for Scoring'

Avec Python et Pandas, je ferais quelque chose comme ça …

 application_statuses = application_statuses.sort_values(['application_uuid', 'changed_at_utc'], ascending=[True, True]).reset_index(drop=True) indexes = application_statuses[application_statuses['application_status']=='Ready for Scoring'].index + 1 next_statuses = application_statuses.ix[indexes] 

Comment puis-je faire la même chose en utilisant SQL?

En fonction de votre explication, vous pouvez utiliser la fonction lead pour cela.

 select next_application_status,application_uuid,changed_at_utc,changed_by from (select t.*, lead(application_status) over(order by application_uuid,changed_at_utc) as next_appliaction_status from tablename t ) t1 where application_status = 'Ready for Scoring' 

Si cela doit être fait pour chaque application_uuid , incluez une partition by en lead comme ci-dessous.

 select next_application_status,application_uuid,changed_at_utc,changed_by from (select t.*, lead(application_status) over(partition by application_uuid order by changed_at_utc) as next_appliaction_status from tablename t ) t1 where application_status = 'Ready for Scoring' 

Si vous avez besoin de toutes les lignes après l'application_status Ready for Scoring , obtenez l'horodatage de cette ligne spécifique et choisissez tous les autres horodatages qui sont plus grands. Cela suppose qu'un application_uuid aura au plus une ligne avec le statut Ready for Scoring .

 select application_status,application_uuid,changed_at_utc,changed_by from (select t.*, max(case when application_status='Ready for Scoring' then changed_at_utc end) over(partition by application_uuid) as status_time from tablename t ) t1 where changed_at_utc > status_time