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

Comment obtenir tous les enregistrements sans supprimer le groupe dans mysql

Si vous utilisez MySQL 8+, nous pouvons gérer cela en utilisant ROW_NUMBER :

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Date ORDER BY Time) rn
    FROM attendancedata
    WHERE EnrolledID = 23
)

SELECT
    Date,
    MAX(CASE WHEN rn = 1 THEN Time END) AS PO1,
    MAX(CASE WHEN rn = 2 THEN Time END) AS PO2,
    MAX(CASE WHEN rn = 3 THEN Time END) AS PO3,
    MAX(CASE WHEN rn = 4 THEN Time END) AS PO4,
    MAX(CASE WHEN rn = 5 THEN Time END) AS PO5,
    MAX(CASE WHEN rn = 6 THEN Time END) AS PO6,
    MAX(CASE WHEN rn = 7 THEN Time END) AS PO7
FROM cte
GROUP BY
    Date
ORDER BY
    Date;

Mais notez qu'en général, il est souhaitable de stocker la date et l'heure dans un seul datetime champ avec MySQL. Dans ce cas particulier, cela a bien fonctionné, mais ce n'est pas toujours vrai.