MySQL เพื่อดึงข้อมูลเวลาเริ่มต้นของแต่ละสถานะ

กระทู้คำถาม
ในฐานข้อมูลผมจะมี วันที่ datenm, เครื่องจักร mac_name, เวลา timenm, สถานะเปิดเครื่อง onsts, สถานะทำงาน wksts
ผมต้องการดึงข้อมูลเวลาของแต่ละกลุ่ม ไม่ทราบว่าต้องทำอย่างไรครับ ผลที่เรียกออกมาอยากให้เป็นตามนี้ครับ

------------------------------------------------------------------------------------------
DATENM |  MAC_NAME | MINTIME | MAXTIME | ONSTS | WKSTS
------------------------------------------------------------------------------------------
20190318| PD-GP-014 |     08:11      |      08:11   |     O       |   null    
------------------------------------------------------------------------------------------
20190318| PD-GP-014 |     08:12      |      08:19   |     O       |     W    
------------------------------------------------------------------------------------------
20190318| PD-GP-014 |     08:21      |      08:26   |     O       |   null    
------------------------------------------------------------------------------------------
20190318| PD-GP-014 |     08:27      |      08:34   |     O       |     W    
------------------------------------------------------------------------------------------

รบกวนเพื่อนๆ ด้วยนะครับ ขอบคุณมากครับ
คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 4
ต้องทำแบบ #2 แนะนำครับ

อันนี้เป็น SQL Server คำสั่งน่าจะคล้ายๆกันนะครับ


DECLARE @t TABLE (
    DATENM        char(8) NOT NULL,
    MAC_NAME    char(9) NOT NULL,
    TIMENM        char(5) NOT NULL,
    ONSTS        char(1) NOT NULL,
    WKSTS        char(1) NULL
);

WITH num AS (
    SELECT TOP 24 ROW_NUMBER() OVER (ORDER BY object_id)-1 R
    FROM sys.objects
)
INSERT INTO @t
SELECT '20190318', 'PD-GP-014', CAST(DATEADD(MINUTE, R, CAST('08:11' as time)) as char(5)), 'O', NULL
FROM num;
UPDATE @t SET WKSTS = 'W'
WHERE TIMENM BETWEEN '08:12' AND '08:19'
OR TIMENM BETWEEN '08:27' AND '08:34';

WITH grp AS (
    SELECT *,
        ROW_NUMBER() OVER (ORDER BY DATENM) -
        ROW_NUMBER() OVER (PARTITION BY WKSTS ORDER BY DATENM, WKSTS) GRP
    FROM @t
)
SELECT DATENM, MAC_NAME, MIN(TIMENM) as [MINTIME], MAX(TIMENM) as [MAXTIME], ONSTS, WKSTS
FROM grp
GROUP BY DATENM, MAC_NAME, ONSTS, WKSTS, GRP
ORDER BY 3

แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่