Obtenez la date de début et la date de fin de l'heure de création
P粉265724930
P粉265724930 2024-02-21 18:25:26
0
1
467

Besoin d'aide, j'ai besoin d'obtenir start_date et end_date à partir de creation_time en fonction du statut is_active. J'ai essayé plusieurs requêtes mais je n'ai pas obtenu les bons résultats.

Exemple de formulaire

id identifiant_utilisateur Nom leader_name est_actif Temps de création
6 29 DF AS 0 2021-10-10
620 29 DF RB 0 2022-02-09
1088 29 DF AS 1 2022-06-30

Le résultat devrait ressembler à ceci :

id identifiant_utilisateur Nom leader_name est_actif Date de début Date de fin Temps de création
6 29 DF AS 0 2021-10-10 2022-02-09 2021-10-10
620 29 DF RB 0 2022-02-09 2022-06-30 2022-02-09
1088 29 DF AS 1 2022-06-30 CURRENT_DATE() 2022-06-30

S'il vous plaît, aidez mes amis, merci d'avance

P粉265724930
P粉265724930

répondre à tous(1)
P粉495955986

Sur la base des informations contenues dans la section questions et la section commentaires, je pense que la ligne avec is_active=1 a l'heure de création la plus récente du groupe (basée sur user_id). Il s'agit de la requête écrite et testée dans le workbench.

select id,user_id,name,leader_name,is_active,
t1.creation_time as start_date, case is_active when 0 then t2.creation_time else current_date() end as end_date,t1.creation_time
from (select id,user_id,name,leader_name,is_active,creation_time,@row_id:=@row_id+1 as row_id
    from test,(select @row_id:=0)t
    where user_id=29
    order by creation_time
    )t1
left join
    (select creation_time,@row_num:=@row_num+1 as row_num
    from test,(select @row_num:=0)t
    where user_id=29
    order by creation_time
    )t2
on t1.row_id+1=t2.row_num
;

-- result set:
# id, user_id, name, leader_name, is_active, start_date, end_date, creation_time
6, 29, DF, AS, 0, 2021-10-10, 2022-02-09, 2021-10-10
620, 29, DF, RB, 0, 2022-02-09, 2022-06-30, 2022-02-09
1088, 29, DF, AS, 1, 2022-06-30, 2022-08-31, 2022-06-30

Les choses ne sont pas encore finies. Si vous souhaitez afficher la sortie en fonction de chaque groupe user_id, utilisez le code suivant :

-- first of all insert the following 4 lines on top of the original table data, which has the same user_id 50 
61  50  DF  AS  0   2021-10-10
630 50  DF  RB  0   2022-02-09
1188    50  DF  TS  0   2022-06-30
2288    50  DF  AS  1   2022-07-30

select  id,t1.user_id,name,leader_name,is_active,
t1.creation_time as start_date, case is_active when 0 then t2.creation_time else current_date() end as end_date,t1.creation_time
from 
 (select id,user_id,name,leader_name,is_active,creation_time,@row_id:=@row_id+1 as row_id
    from test,(select @row_id:=0)t
    order by user_id,creation_time
    )t1
left join
    (select user_id,creation_time,@row_num:=@row_num+1 as row_num
    from test,(select @row_num:=0)t
    order by user_id,creation_time
    )t2
on t1.user_id=t2.user_id and t1.row_id+1=t2.row_num
;

-- result set:
# id, user_id, name, leader_name, is_active, start_date, end_date, creation_time
6, 29, DF, AS, 0, 2021-10-10, 2022-02-09, 2021-10-10
620, 29, DF, RB, 0, 2022-02-09, 2022-06-30, 2022-02-09
1088, 29, DF, AS, 1, 2022-06-30, 2022-08-31, 2022-06-30
61, 50, DF, AS, 0, 2021-10-10, 2022-02-09, 2021-10-10
630, 50, DF, RB, 0, 2022-02-09, 2022-06-30, 2022-02-09
1188, 50, DF, TS, 0, 2022-06-30, 2022-07-30, 2022-06-30
2288, 50, DF, AS, 1, 2022-07-30, 2022-08-31, 2022-07-30
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal