我有一张电影表,其中的放映时间是从网络提要读入 MySQL 的。表格的格式为:
**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个时间段(14:00之前、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;
关于mysql - MariaDB/MySQL 电影数据显示为每日时间表 - 4 个时间段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49514201/