说我有多个日期的数据,而我只想选择一个日期的数据,该日期的最大日期小于特定日期。
例如
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行。
我希望看到最优化的查询。谢谢
这里有四个选择:
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
这将提供您想要的输出。
SELECT *
FROM Your_Table
WHERE date = (
SELECT MAX(date)
FROM Your_Table
WHERE date < '2020-01-01'
)