mysql - 比较 MYSQL 子查询中的日期

标签 mysql sql

我有两张 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/

相关文章:

mysql - 在等于之前不等于的 SQL 性能,反之亦然

php - SQL 选择日期在今天之前的记录

MySql:来自不同表的 JOIN 和 SUM

mysql - 如果第 3 个表没有该值,则连接 3 个表

sql - postgresql按工作日选择包括rails中的空记录

php - 无法将值 '-1' 插入数据库

php - 停止没有验证码的机器人 - 有一个转折

mysql - 我是否需要在 Play Framework 中管理数据库连接池,还是 Play 会为我做这件事?

php - EasyAPNS 无法连接到数据库

sql - 将历史表转换为使用范围日期(从和到日期)而不是快照日期