2014-01-07 17 views
0

最大的,我有以下表格:結合2個SQL查詢來從一列得到不同的值,並從第二

Country Year 
100 201313 
100 201212 
101 201314 
101 201213 
101 201112 
102 201313 
102 201212 
103 201313 
103 201212 
104 201313 
104 201212 

我需要一個查詢,提供只是一個國家,只是今年的最大價值,例如:

Country Year 
100 201313 
101 201314 
102 201313 
103 201313 
104 201313 

我的解決方案到現在爲止是使我得到了鮮明的國家,然後在同時,另一個查詢得到年第一查詢...

$resOne = $mysqli->query("SELECT DISTINCT Country from Table ORDER BY Country ASC"); 
while ($obj = $resOne->fetch_object()){ 
    $resTwo = $mysqli->query("SELECT Country, Year from Table WHERE Country = $resOne->Country ORDER BY Country ASC LIMIT 1")->fetch_object(); 
    echo $resTwo->Country $resTwo->Year; 
} 

問題:是否有可能通過一個查詢來提供此結果?

感謝您的閱讀和回答。

UPDATE

腳本從user2989408的答案,德魯是好的,工作,但是當我加入表另一個我可不是得到正確的數據。

這裏有一個撥弄我的DB樣品和腳本:http://sqlfiddle.com/#!2/31613/1/0

我怎樣才能讓該說明行顯示MAX(s.Year)的說明?例如,小提琴中的第一行應顯示「法國最新201314」。

+1

我可以開始問你爲什麼要存儲在這個時尚的新年? – Zane

+0

這是一個足球/足球網站。根據國家,聯賽可以從2013/14或2013年開始,或者在同一年有兩場比賽...因此201314 = 2013/14,201313 = 2013,201301 = 2013年的第一個賽季,201302 = 2013年的第二個賽季 –

+0

在顯示器上進行這些類型的轉換,而不是必須解析出這兩個值,會不會更有效? – Zane

回答

1

查詢:

SQLfiddleexample

SELECT c.Name, s.Description, s.Year 
FROM countries c 
JOIN seasons s 
    ON c.Id=s.Id 
LEFT JOIN seasons s2 
    ON s.ID = s2.ID 
    AND s2.Year > s.Year 
WHERE s2.id is null 
ORDER BY c.Name ASC 

結果:

|  NAME | DESCRIPTION | YEAR | 
|-------------|-------------|--------| 
|  France |  newest | 201314 | 
|  Germany |   new | 201212 | 
|  Italy |   new | 201313 | 
| Netherlands |  newest | 201313 | 
|  Spain |   new | 201313 | 
1

您的查詢應該是

SELECT t.Country, MAX(t.Year) 
FROM Table t 
GROUP BY t.Country 
ORDER BY t.Country ASC 

編輯:更新的要求後,選擇其它信息的查詢可以如下工作進行修改。

SELECT c.Name, s.Description, s.Year 
FROM 
    (
     SELECT s.id as id, MAX(s.Year) as Max 
     FROM seasons s 
     GROUP BY s.Id 
    ) as X 
    JOIN countries c ON c.Id = X.Id 
    JOIN seasons s ON s.id = X.id AND X.Max = s.Year 
ORDER BY c.Name ASC 

子查詢也可以用來選擇所需的信息如下。

SELECT c.Name, 
    (SELECT s1.Description 
     FROM seasons s1 WHERE s1.id = X.id AND X.Max = s1.Year) as Description, 
    X.Max as Year 
FROM 
    (
     SELECT s.id as id, MAX(s.Year) as Max 
     FROM seasons s 
     GROUP BY s.Id 
    ) as X 
    JOIN countries c ON c.Id = X.Id 
ORDER BY c.Name ASC 

本質上有,如果你知道如何GROUP BY作品得到你所需要的信息的方法不止一種。

+0

您編寫的腳本非常好用,但是當我將表格與另一個表格連接時,我無法獲得正確的數據。請參閱[鏈接](http://sqlfiddle.com/#!2/31613/1/0)我如何使描述行顯示來自MAX(s.Year)的描述?例如,小提琴中的第一行應該顯示「法國最新201314」 –

+0

@Emmanuel描述必須單獨使用另一個'JOIN'來選擇,如[在此顯示](http://sqlfiddle.com/#!2/31613/13)或使用子查詢。我猜你只想選擇最近一個賽季的國家名稱和說明。 – user2989408

0
SELECT   Country, 
       Max(Year) 
FROM Table 
GROUP BY Country 
+0

'DISTINCT'不需要。 –

相關問題