Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So erhalten Sie alle Datensätze, ohne sie in der Gruppe in mysql zu entfernen

Wenn Sie MySQL 8+ verwenden, können wir dies mit ROW_NUMBER handhaben :

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;

Beachten Sie jedoch, dass es im Allgemeinen wünschenswert ist, Datum und Uhrzeit in einem einzigen datetime zu speichern Feld mit MySQL. In diesem speziellen Fall hat es gut geklappt, aber das muss nicht immer der Fall sein.