如何选择日期最大的日期小于Mysql中特定日期的日期的数据

问题描述 投票:0回答:2

说我有多个日期的数据,而我只想选择一个日期的数据,该日期的最大日期小于特定日期。

例如

id  other_columns date 
------------------------
1   ...          2020-01-12
2   ...          2019-12-31
3   ...          2019-12-31
4   ...          2019-11-01
5   ...          2019-11-01
6   ...          2018-12-21

对于上述情况,如果条件小于'2020-01-01',将选择第2行和第3行。由于第2行和第3行的日期略小于“ 2020-01-01”。

如果条件小于'2019-12-31',则将选择第4行和第5行。

我希望看到最优化的查询。谢谢

mysql sql
2个回答
1
投票

这里有四个选择:

SELECT m1.*
FROM mytable m1
JOIN (SELECT MAX(date) AS maxdate
      FROM mytable
      WHERE date < '2020-01-01') m2 ON m2.maxdate = m1.date
;
SELECT *
FROM mytable
WHERE date = (SELECT MAX(date) 
              FROM mytable
              WHERE date < '2020-01-01')
;
SELECT *
FROM mytable m1
WHERE m1.date < '2020-01-01'
  AND NOT EXISTS (SELECT *
                  FROM mytable m2
                  WHERE m2.date > m1.date AND m2.date < '2020-01-01')
;
SELECT m1.*
FROM mytable m1
LEFT JOIN mytable m2 ON m2.date > m1.date AND m2.date < '2020-01-01'
WHERE m1.date < '2020-01-01' AND m2.id IS NULL

全部为您的样本数据提供相同的输出:

id  other_columns   date
2   ...             2019-12-31
3   ...             2019-12-31

Demo on SQLFiddle


1
投票

这将提供您想要的输出。

SELECT * 
FROM Your_Table
WHERE date =   (
        SELECT MAX(date) 
            FROM Your_Table
        WHERE date < '2020-01-01'
        )
© www.soinside.com 2019 - 2024. All rights reserved.