我正在尝试根据课程的日期和时间选择随机记录。如果一个班级当天有超过1个时段,我想选择那个,然后移动到第二天,并为每一天做同样的事情。预定最多一周。我知道如何在MySQL中使用RAND()获取随机记录,但我怎样才能使用相同的代码每天使用?我环顾四周,发现问题很接近但没有日期和时间。
数据示例:
Classroom Start_Date Start_Time
1 6/6/18 1700
1 6/6/18 1800
2 6/7/18 1200
2 6/7/18 1300
2 6/7/18 1400
每个教室每天只有1条记录。到目前为止我有这个,我很确定我需要创建一个上一个和下一个记录。但无法弄清楚如何让它发挥作用。我到目前为止的代码如下。在此先感谢您的帮助。
MySQL代码:
SELECT CLASSROOM, n,start_date, start_hour
FROM
(SELECT @prev:='', @n := 0) init
JOIN
(select @n := if(2a.CLASSROOM != @prev, 1, @n + 1) AS n,
@prev := 2a.CLASSROOM
, date_format(2a.START_DT_TIME, '%m/%d/%Y') as start_date
, 2a.CLASSROOM + CASE WHEN 1a.TIME_ZONE_KEY = 'America/Chicago' THEN Hour(CONVERT_TZ(2a.START_DT_TIME,'GMT','America/Chicago'))
WHEN 1a.TIME_ZONE_KEY= 'America/Denver' THEN Hour(CONVERT_TZ(2a.START_DT_TIME,'GMT','America/Denver'))
WHEN 1a.TIME_ZONE_KEY= 'America/Los_Angeles'THEN hour(CONVERT_TZ(2a.START_DT_TIME,'GMT','America/Los_Angeles'))
WHEN 1a.TIME_ZONE_KEY = 'America/New_York'THEN hour(CONVERT_TZ(2a.START_DT_TIME,'GMT','America/New_York'))
WHEN 1a.TIME_ZONE_KEY = 'America/Phoenix'THEN hour(CONVERT_TZ(2a.START_DT_TIME,'GMT','America/Phoenix'))
ELSE Null
END AS start_hour
from XX_WELCOME_SESSION_0 1a
JOIN XX_WELCOME_SESSION_0_CLASS 2a
ON 1a.ACCOUNT_ID=2a.ACCOUNT_ID
where 2a.START_DT_TIME > NOW()
ORDER BY 2a.CLASSROOM
) x
WHERE n <=1
ORDER BY CLASSROOM, n
;