MariaDB/MySQL 电影数据显示为每日时间表 - 4 个时间段

MariaDB/MySQL Film data show as daily schedule - 4 time periods

我有一部 table 的电影,放映时间从网络源读入 MySQL。 table 的格式是:

**id  film             date         time**
1    Lady Bird       2017-03-27   13:40:00
2    I, Tonya        2017-03-27   15:40:00
3    I, Tonya        2017-03-27   17:00:00
4    Lady Bird       2017-03-27   20:00:00
......

我需要格式化成有4个时间段([=28=之前]、14:00-17:00、17:00-19:00之后19:00)。所以结果数据将是:

film      morning     afternoon     evening    night
Lady Bird   13:40                    17:00
I, Tonya                15:40                   20:00

我使用了以下在列中设置时间的查询:

SELECT 
     film,
     CASE WHEN time < "14:00" THEN time END AS morning, 
     CASE WHEN time BETWEEN "14:00" AND "17:00" THEN time END AS afternoon,
     CASE WHEN time BETWEEN "17:00" AND "19:00" THEN time END AS evening,
     CASE WHEN time >= "19:00" THEN time END AS night 
FROM 
     `films` 
WHERE 
     date=date(now())

然而,结果是每次单独记录:

Film         morning      afternoon    evening     night
Lady Bird    13:40          null         null       null
I, Tonya     null          15:40         null       null
I, Tonya     null           null        17:00       null
Lady Bird    null           null         null      20:00

有没有什么办法可以把每张片子记录合二为一,把时间放在正确的位置:

Lady Bird    13:40        null       17:00      null

如果我按名称分组,它只显示每部电影的第一次,而忽略其余部分

是的,按电影汇总,并取您当前 CASE 表达式的最大值。这会将每部电影的几条记录折叠成一条记录。

SELECT 
    film,
    MAX(CASE WHEN time < "14:00" THEN time END) AS morning, 
    MAX(CASE WHEN time BETWEEN "14:00" AND "17:00" THEN time END) AS afternoon,
    MAX(CASE WHEN time BETWEEN "17:00" AND "19:00" THEN time END) AS evening,
    MAX(CASE WHEN time >= "19:00" THEN time END) AS night 
FROM films
WHERE
    date = CURDATE()
GROUP BY
    film;