2015-09-28 159 views
0

我有一張表,其中包含student_id和他們抵達學校時的日期時間戳(log_time)。MySQL GROUP BY和合並列

我已經建立了一個查詢,列出了他們到達本週的時間旁邊的student_id。我怎樣才能將結果合併起來,例如從下面的數據中,student_id 4211在一行中顯示的時間與星期二,星期三和星期四的時間?使用GROUP BY只顯示一次。我需要以某種方式按照student_id進行分組,但結合了一天的時間。

SELECT 
    student_id, 
    if((DAYOFWEEK(log_time)=2)=0, '-', DATE_FORMAT(log_time,'%H:%i:%s')) AS monday_time, 
    if((DAYOFWEEK(log_time)=3)=0, '-', DATE_FORMAT(log_time,'%H:%i:%s')) AS tuesday_time, 
    if((DAYOFWEEK(log_time)=4)=0, '-', DATE_FORMAT(log_time,'%H:%i:%s')) AS wednesday_time, 
    if((DAYOFWEEK(log_time)=5)=0, '-', DATE_FORMAT(log_time,'%H:%i:%s')) AS thursday_time, 
    if((DAYOFWEEK(log_time)=6)=0, '-', DATE_FORMAT(log_time,'%H:%i:%s')) AS friday_time 
FROM 
    tbl_student_register 
WHERE 
    YEARWEEK(`log_time`, 1) = YEARWEEK(CURDATE(), 1) 

這會從我的數據

enter image description here

回答

0

給出的結果你要有條件聚集:

SELECT student_id, 
     MAX(CASE WHEN DAYOFWEEK(log_time) = 2 THEN DATE_FORMAT(log_time, '%H:%i:%s') END) AS monday_time, 
     . . . 
FROM tbl_student_register 
WHERE YEARWEEK(`log_time`, 1) = YEARWEEK(CURDATE(), 1) 
GROUP BY student_id; 

MAX()結合的值加在一起。如果給定日期只有一個條目,那麼它將返回該條目。如果有多個條目,則需要找出處理該條目的邏輯。