Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 组合两个SQL查询,从一列中获取不同的值,从第二列中获取最大值_Mysql_Sql - Fatal编程技术网

Mysql 组合两个SQL查询,从一列中获取不同的值,从第二列中获取最大值

Mysql 组合两个SQL查询,从一列中获取不同的值,从第二列中获取最大值,mysql,sql,Mysql,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 到目前为止,我的解决方案是

我有下表:

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;
}
问题:是否有可能仅通过一个查询就提供此结果

谢谢你的阅读和回答

更新

来自user2989408和Drew的答案上的脚本是好的,并且工作正常,但是当我加入另一个表时,我没有得到正确的数据

下面是我的DB示例和脚本:

如何使描述行显示MAX(s.Year)的描述?例如,小提琴的第一行应该显示“法国最新201314”。

您的查询应该是

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
如果您了解
groupby
的工作原理,基本上可以通过多种方式获取所需信息

查询:

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

结果:

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

首先我想问一下,你为什么要用这种方式存储你的一年?这是一个足球/足球网站。根据国家的不同,联赛可以从2013/14年开始,也可以仅从2013年开始,或者在同一年举行两次比赛。。。因此,201314=2013/14、201313=2013、201301=2013年第一季度和201302=2013年第二季度。在显示器上进行此类转换而不是解析这两个值不是更有效吗?在显示器上,我显示的是正确的字符串,例如“2013/14”而不是“201314”。问题是要做一个索引,在那里我显示所有国家和它们最近的联赛。例如,显示:西班牙联赛BBVA 2013/14
DISTINCT
不需要。您编写的脚本很好,工作正常,但当我将表与另一个表合并时,我没有获得正确的数据。查看如何使描述行显示MAX(s.Year)的描述?例如,fiddle中的第一行应显示“France New 201314”@Emmanuel。必须使用另一个
JOIN
单独选择描述,如图所示或使用子查询。我猜你只想选择最近一季的国家名称和描述。
|        NAME | DESCRIPTION |   YEAR |
|-------------|-------------|--------|
|      France |      newest | 201314 |
|     Germany |         new | 201212 |
|       Italy |         new | 201313 |
| Netherlands |      newest | 201313 |
|       Spain |         new | 201313 |