3

所以我有一张桌子,列出了他们提供的所有服务以及他们prime_ministers的服务。yearparty

我需要 3 位信息;他们name,他们的第一year任和party最后一年的任期(一些换党)。

桌子看起来有点像这样

min_nr|pm_name      |party           |yr_comm  
---------------------------------------------- 
1      Barton E      Protectionist    1901  
.  
.  
.  
11     Hughes W M    Labour           1915  
12     Hughes W M    National Labour  1916  
13     Hughes W M    Nationalists     1917  
14     Hughes W M    Nationalists     1918  
.  
.  

我已经做了很多搜索,但我不知道如何输入这个来获得结果。

Woo先生在评论部分做到了。事实证明,我不了解多个 JOINS 以及 ON 中 AND 的正确用法。

SELECT a.pm_name, a.party, c.minYear
FROM  Table1 a 
      INNER JOIN
      (
          SELECT pm_name, MAX(yr_comm) maxYear
          FROM table1
          GROUP BY pm_name
      ) b ON a.pm_name = b.pm_name AND
             a.yr_comm = b.maxYear
      INNER JOIN
      (
        SELECT pm_name, MIN(yr_comm) minYear
        FROM table1
        GROUP BY  pm_name
      ) c ON a.pm_name = c.Pm_name

编辑,很多很多的编辑

4

1 回答 1

4

尝试使用子查询来获取每位总理的最长年份。如果您想获取所有列,则此方法有效。

SELECT a.*
FROM tableName a INNER JOIN
        (
            SELECT ID, MAX(`year`) maxYear
            FROM tableName
            GROUP BY ID
        ) b ON a.ID = b.ID AND
                a.`Year` = b.maxYear

tableName=> 将其更改为您的表的名称
ID=> 将其更改为主键
Year=> 将其更改为您的年份的列名。

但如果你只想得到ID总理的名字,他们的最后一年是哪一年。您可以直接执行此操作而无需子查询。

SELECT ID, MAX(`year`) finalYear
FROM tableName
GROUP BY ID

PS:如果这个答案仍然不清楚,请添加您的表的架构,示例记录和所需的结果,我们可以处理它。谢谢。

更新 1

SELECT a.pm_name, a.party, c.minYear
FROM  Table1 a 
      INNER JOIN
      (
          SELECT pm_name, MAX(yr_comm) maxYear
          FROM table1
          GROUP BY pm_name
      ) b ON a.pm_name = b.pm_name AND
             a.yr_comm = b.maxYear
      INNER JOIN
      (
        SELECT pm_name, MIN(yr_comm) minYear
        FROM table1
        GROUP BY  pm_name
      ) c ON a.pm_name = c.Pm_name

SQLFiddle 演示

于 2012-09-24T02:23:35.677 回答