Mysql 在一个查询中检索最小和最大日期

Mysql 在一个查询中检索最小和最大日期,mysql,Mysql,我在mysql数据库中有一个表“travel_data”,其中有三个相关列: +--------------------------+ | from | to | date | +--------------------------+ |City1 | City2 | 2015-12-12| |City3 | City4 | 2016-12-12| |City1 | City2 | 2015-06-06| |City3 | City4 | 2017-01-01| +-------

我在mysql数据库中有一个表“travel_data”,其中有三个相关列:

+--------------------------+
| from  | to   | date      |
+--------------------------+
|City1 | City2 | 2015-12-12|
|City3 | City4 | 2016-12-12|
|City1 | City2 | 2015-06-06|
|City3 | City4 | 2017-01-01|
+--------------------------+
(加上我目前不需要的其他几根柱子)

我正在寻找一个查询,如果可能的话,可以在一个查询中获得每行每个行程的第一个和最后一个日期,例如:

+------------------------------------------------+
|from  | to    | firstTravelDate | LastTravelDate|
+------------------------------------------------+
|City1 | City2 | 2015-06-06      | 2015-12-12    |
|City3 | City4 | 2016-12-12      | 2017-01-01    |
+------------------------------------------------+
我搜索过“mysql在一个查询中选择最大最小值”,但从那里得到的解决方案,就它们的工作原理而言,返回了每个表的mix/max;我需要从/到的每个可能组合的最小/最大值。这让我感到困惑,甚至连一个工作查询的开始都没有。这只需要在MySql上运行,因此不需要符合标准的解决方案

(欢迎对标题进行改进,我觉得标题没有完全涵盖实际问题)

试试看

select
   `from`, `to`, min(date) firstTravelDate, max(date) LastTravelDate
from travel_data
group by `from`, `to`

演示

正如Gordon在评论中指出的,这是一个简单的聚合查询。您将要执行以下操作

SELECT `from`, to, 
       MIN(date) AS firstTravelDate, 
       MAX(date) AS LastTravelDate 
FROM travel_data 
GROUP BY `from`, to;
由于变量“FROM”和“TO”是MySQL中的保留关键字,您可能需要在这些变量上加上反勾号


此外,出于对“教你钓鱼”的兴趣,我建议你看一看。有很多SQL资源,Mode的重点是PostgreSQL而不是MySQL。。。但它也很好,读起来很有趣

您可以为“from”和“to”设置变量 然后运行:

select min(date),max(date)
from yourtable
where travel_data.from=x
and travel_data.to=y

这是一个基本的聚合查询。你熟悉分组方式吗?@GordonLinoff似乎还不够。我可以根据我的行程进行分组,我设法得到了最短日期或最长日期,但不是两个都在同一行。实际上我认为这行不通。您必须迭代所有可能的from和to值,这将是非常低效的,特别是与按照预期使用SQL并执行按from和to分组的聚合相比。感谢您的帮助。我以前知道很多SQL,但是如果你不练习的话,它显然就不适合你了。我一定会重述:-)一旦有机会测试,我会投票并接受。酷。如果有任何问题,请告诉我:)再次感谢!当我开始在命令行上进行测试时,服务器上的phpMyAdmin会给出不稳定的结果,不管是什么查询,这一事实让我很不高兴。