2015-09-09 40 views
1

我有一個MySQL數據庫中的表「travel_data」有三個相關的數據列:檢索MIN和MAX日在一個查詢

+--------------------------+ 
| from | to | date  | 
+--------------------------+ 
|City1 | City2 | 2015-12-12| 
|City3 | City4 | 2016-12-12| 
|City1 | City2 | 2015-06-06| 
|City3 | City4 | 2017-01-01| 
+--------------------------+ 

(加上其他一些colums,我不需要在目前) 。

我正在尋找一個查詢,讓我得到的,在可能的話一個查詢,每行的每個行程的第一和最後日期,即是這樣的:

+------------------------------------------------+ 
|from | to | firstTravelDate | LastTravelDate| 
+------------------------------------------------+ 
|City1 | City2 | 2015-06-06  | 2015-12-12 | 
|City3 | City4 | 2016-12-12  | 2017-01-01 | 
+------------------------------------------------+ 

我搜索「mysql在一個查詢中選擇最小值」,但是從這裏開始的解決方案,因爲他們都在工作,所以返回每個表的混合/最大值;我需要從/到每個可能的組合的最小值/最大值。這讓我感到困惑,甚至在一個工作查詢甚至沒有開始的情況下。這需要僅在MySql上運行,因此不需要符合標準的解決方案。

(對標題的改進值得歡迎,我不覺得標題完全覆蓋了實際問題)。

+0

這是一個基本的聚集查詢。你熟悉「group by」嗎? –

+0

@GordonLinoff似乎還不夠。我可以按照我的行程分組,我設法得到最小或最大日期,但不能同時排在同一行。 –

回答

4

戈登在評論中指出,這是一個簡單的彙總查詢。您將要執行以下操作

SELECT `from`, to, 
     MIN(date) AS firstTravelDate, 
     MAX(date) AS LastTravelDate 
FROM travel_data 
GROUP BY `from`, to; 

你可能需要回蜱的變量「FROM」和「TO」,因爲這些在MySQL中被保留的關鍵字。

此外,爲了「教你釣魚」的好處,我建議看看https://sqlschool.modeanalytics.com/。那裏有很多SQL資源,Mode的重點是PostgreSQL,而不是MySQL ......但它也非常好,非常有趣。

+0

感謝您的幫助。我曾經知道很多SQL,但顯然如果你不練習,它不會留在你身邊。我一定會做一下回顧:-)只要我有機會測試,我會盡快接受並接受。 –

+0

很酷。讓我知道如果有任何問題:) – evanv

+0

再次謝謝你!我被我的服務器上的phpMyAdmin無論什麼查詢都給出了不穩定的結果這一事實拋棄了,一旦我開始在命令行上進行測試,事情就會很好地發揮作用。 –

3

嘗試;

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

演示sqlfiddle

0

可以使變量的「從」和「到」 然後運行:

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

我其實不認爲這會起作用。您必須遍歷from和to的所有可能的值,這將會非常低效,尤其是與僅按預期方式使用SQL並按照from和to執行聚合相比。 – evanv