我有一张表格,其中包含 student_id 以及他们抵达学校时的日期时间戳( log_time )。
我已经构建了一个查询,列出了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)
这将从我的数据中得出以下结果
答案 0 :(得分: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()
将值组合在一起。如果给定日期只有一个条目,则它将返回该条目。如果有多个条目,您需要找出处理该条目的逻辑。