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;
我有一部 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;