Mysql 从相似的结果中筛选出每组除一个结果外的所有结果
因此,我有一个表格,列出了所有的Mysql 从相似的结果中筛选出每组除一个结果外的所有结果,mysql,sql,Mysql,Sql,因此,我有一个表格,列出了所有的首相,以及他们任职的年份,以及他们参加的政党 我需要3位信息;他们的姓名,他们任职的第一年,以及任职的最后一年政党(一些交换政党) 这张桌子看起来有点像这样 min_nr|pm_name |party |yr_comm ---------------------------------------------- 1 Barton E Protectionist 1901 . . . 11
首相
,以及他们任职的年份
,以及他们参加的政党
我需要3位信息;他们的姓名
,他们任职的第一年
,以及任职的最后一年政党(一些交换政党)
这张桌子看起来有点像这样
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
.
.
我已经做了很多搜索,但我不知道如何键入这个来获得结果
胡先生在评论部分这样做了。事实证明,我不理解多重连接以及和的正确用法
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
编辑,多次编辑尝试子查询以获取每位首相的最长年份。如果要获取所有列,则此操作有效
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
=>将其更改为您所在年份的列名
但是如果你只想得到首相的身份证,他们的最后一年是哪一年。您可以不使用子查询直接执行此操作
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
好吧,你说的不太管用,但是通过谷歌搜索你的代码并对其进行修改,我终于可以找到一种方法让它工作了。我将重新键入我的问题,以便对其他人更有用。@Talisin那么在你更新的问题中,结果会是什么?总理姓名,上任第一年,去年执政党。哦,对了,在我展示的表格部分,将是巴顿E,保护主义者,1901年和休斯W M,民族主义者,1915年。我遇到的麻烦是,民族主义者应该代表最后的拥抱,而1915年代表拳头。哇,谢谢,就是这样。好吧,我要好好读书,开始试着更好地理解。非常感谢您的时间和帮助。那么在您更新的问题中,结果会是什么?