我有一个疑问,即目前的委任为“现在”,而其后的所有委任则列为“下一步”。不过,我很难适应这一点,因为只有一个约会是下一个约会。
到目前为止..。
SELECT
user_name,
DATE(apt_start_datetime) AS apt_date,
TIME(apt_start_datetime) AS apt_start_time,
TIME(apt_end_datetime) AS apt_end_time,
CASE
WHEN (NOW() BETWEEN apt_start_datetime AND apt_end_datetime) THEN 'NOW'
ELSE
CASE WHEN (NOW() < apt_start_datetime) THEN 'NEXT' ELSE NULL END
END AS now_next
FROM
users
JOIN
apts ON DATE_FORMAT(CURDATE(), "%x%v") = DATE_FORMAT(apt_start_datetime, "%x%v")
WHERE
user_id = 123456
ORDER BY
apt_date,
apt_start_time这将返回如下内容:
user_name apt_date apt_start_time apt_end_time now_next
--------------------------------------------------------------------------
user1 2015-11-20 10:45:00 10:55:00 null
user2 2015-11-20 10:55:00 11:55:00 NOW
user3 2015-11-20 11:55:00 12:15:00 NEXT
user4 2015-11-20 12:15:00 12:35:00 NEXT
user5 2015-11-20 12:35:00 12:55:00 NEXT但我想要的是:
user_name apt_date apt_start_time apt_end_time now_next
--------------------------------------------------------------------------
user1 2015-11-20 10:45:00 10:55:00 null
user2 2015-11-20 10:55:00 11:55:00 NOW
user3 2015-11-20 11:55:00 12:15:00 NEXT
user4 2015-11-20 12:15:00 12:35:00 null
user5 2015-11-20 12:35:00 12:55:00 null有什么想法吗?
发布于 2015-11-20 11:52:39
问题是导致了sql的这一部分。
CASE WHEN (NOW() < apt_start_datetime) THEN 'NEXT' ELSE NULL ENDapt_start_datetime早于现在()的所有行都有"NEXT“。
您必须先找到 apt_start_datetime,然后是NOW(),然后使用这个datetime进行比较,而不是apt_start_datetime。
在伪sql中,类似于
CASE WHEN (NOW() < (SELECT apt_start_datetime FROM tbl WHERE apt_start_datetime > NOW() ORDER BY DIFF(apt_start_datetime,NOW()) DESC LIMIT 1)) THEN 'NEXT' ELSE NULL END编辑:这是最简单的解决方案,但会很慢。
https://stackoverflow.com/questions/33825568
复制相似问题