所以我有一张表格列出了他们所服务的所有prime_ministers
和year
以及他们所在的party
。
我需要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
.
.
我做了很多搜索,但我不知道如何输入这个搜索结果。
吴先生在评论部分做了这件事。事实证明,我不了解多个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
编辑,许多编辑
答案 0 :(得分: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