我有两张 table
class
-------------
id name
-------------
1 Knives
2 Pastries
class_date
-------------
get_id start_date
-------------
1 2017-10-09
1 2017-11-15
1 2017-12-03
2 2017-10-30
“刀”类是一个具有多个日期的系列。 “糕点”类(class)仅在一个日期提供。
我希望我的结果基于 2017 年 10 月 10 日(或当前日期)。在我的搜索中,我只想要基于第一个日期的结果 - 在本例中,“Knives”的日期为 2017 年 10 月 9 日,应该会取消其显示在结果中的资格。 “糕点”应该出现。
我不确定是否应该执行 LEFT OUTER JOIN 或子查询。我已经尝试过这两种方法,但都不起作用 - 但我可能做得不正确。
这是我尝试过的:
SELECT *
FROM class, class_date WHERE
class_date.get_id = class.id &&
(SELECT DATE(start_date)
FROM class, class_date WHERE
class_date.get_id = classes.id
ORDER BY class_date.start_date ASC
LIMIT 1
) > CURDATE()
ORDER BY class_date.start_date ASC
和
SELECT *
FROM class
LEFT OUTER JOIN
class_date ON
class_date.get_id = classes.id
WHERE
class_date.start_date > CURDATE()
GROUP BY classes.class_id
ORDER BY class_dates.start_date ASC
我感觉子查询是可行的方法,但我没有得到任何结果。如果我使用 < 而不是 > ,我会得到太多结果。任何帮助将不胜感激。
最佳答案
这是获取特定日期的最新记录的一种方法。这允许您获取所有行(并且您可以加入 class
来获取其中的行):
select cd.*
from class_date cd
where cd.date = (select max(cd2.date)
from class_date cd2
where cd2.get_id = cd.get_id and
cd2.date <= '2017-10-09'
);
如果您只想要给定类(class)的最长日期:
select cd.get_id, max(cd.date)
from class_date cd
where cd.date <= '2017-10-09'
group by cd.get_id;
关于mysql - 比较 MYSQL 子查询中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46678054/