我正在创建一个显示开放时间的小应用程序。
它的工作方式如下:我生成一个日期列表,然后检查数据库是否打开。
数据库normal
包含:
day_of_week | open | close | since
INT(11) | TIME | TIME | DATE
------------|--------|--------|------------
1 |09:00:00|17:00:00|2013-01-09
2 |08:00:00|18:00:00|2014-01-06
...
从开幕时间开始的那个日期以来的日期显示(所以我可以回顾过去并获得正确的时间以及未来。)
在我的日期列表中,我检查since >= $date_in_list
是否只显示最大值:
SELECT *,MAX(since) FROM normal WHERE day_of_week = '2' AND since <= '2014-06-03'
这样可以正常工作,除非我有2个小时的相同日期(例如我们在中午关闭时)。
所以当我有这样的数据时:
day_of_week | open | close | since
------------|--------|--------|------------
2 |09:00:00|12:00:00|2014-01-06
2 |14:00:00|18:00:00|2014-01-06
我想在09:00:00 - 12:00:00和14:00:00 - 18:00:00之间获得,但我似乎无法找到正确的查询。
答案 0 :(得分:2)
使用子查询怎么样?沿着这些方向的东西
SELECT *
FROM normal
WHERE day_of_week = '2'
AND since = (
SELECT MAX(since)
FROM normal
WHERE day_of_week = '2'
)
答案 1 :(得分:0)
尝试像这样的GROUP BY
子句
SELECT *,
MAX(since)
FROM normal
WHERE day_of_week = '2'
AND since <= '2014-06-03'
GROUP BY `since`,`open`,`close`;