我有以下msql列结构。如何选择未来日期中最早的日期而忽略过去的日期。开始日期
2018-07-01 -> past 2018-07-07 -> past 2018-07-14 -> future (SELECT THIS ONE ONLY, the earliest of the future ones) 2018-07-18 -> future 2018-07-22 -> future
请帮忙。我在挣扎。
txu3uszq1#
这个答案的前一个版本是无效的,特别是在大表上。它没有使用任何索引。这里有一个更好的方法:
SELECT DATE(start_date) FROM your_table_name WHERE start_date >= CURRENT_DATE + INTERVAL 1 DAY ORDER BY start_date ASC LIMIT 1
这可以利用上的索引 start_date 列。它使用短路 LIMIT 1 ,一旦找到结果。以前的版本(不使用):试试这个:
start_date
LIMIT 1
SELECT MIN(DATE(start_date)) FROM table WHERE DATE(start_date) > DATE(NOW())
函数提供当前日期。所以我们只搜索那些比当前日期还多的日期。在搜索的日期中,我们使用min()函数获得最小(最早)日期。函数的作用是:将日期/日期时间表达式(例如:result of now())中的日期部分提取为yyyy-mm-dd格式(例如: '2018-07-27' ).
'2018-07-27'
1条答案
按热度按时间txu3uszq1#
这个答案的前一个版本是无效的,特别是在大表上。它没有使用任何索引。这里有一个更好的方法:
这可以利用上的索引
start_date
列。它使用短路
LIMIT 1
,一旦找到结果。以前的版本(不使用):
试试这个:
函数提供当前日期。所以我们只搜索那些比当前日期还多的日期。
在搜索的日期中,我们使用min()函数获得最小(最早)日期。
函数的作用是:将日期/日期时间表达式(例如:result of now())中的日期部分提取为yyyy-mm-dd格式(例如:
'2018-07-27'
).