2015-06-27 168 views
0

我正在MySQL中编写查询,它已向我提出质疑。这是情况;使用另一列的最大值选择列的最大值

我们假设我有一张名为'status'的表格,它保存了类似电视节目的数据;

+---------+---------+---------+---------+ 
| id | season | episode | channel | 
+---------+---------+---------+---------+ 
| 1  | 2 | 10 | a | 
| 1  | 3 | 2 | b | 
| 1  | 2 | 9 | c | 
| 1  | 3 | 1 | d | 
| 1  | 3 | 2 | e | 
+---------+---------+---------+---------+ 

我想检索包含上个赛季最后发行的剧集的行。根据上面的表格,我希望这样的

+---------+---------+---------+ 
| season | episode | channel | 
+---------+---------+---------+ 
| 3 | 2 | b | 
| 3 | 2 | e | 
+---------+---------+---------+ 

赛季列的最大值为3。在这种情况下的结果,我已经检索到有情节列的最大值的行,其中季等于3.我写了一个查询,它给出了预期的结果,但我不认为这是一个合适的查询。我如何改进下面的查询?如果需要,我可以添加额外信息或提供更多示例。

SELECT `season`, 
     `episode`, 
     `channel` 
FROM `status` 
WHERE `tvseriesid` = 1 
     AND `season` = (SELECT Max(season) 
         FROM `status` 
         WHERE `tvseriesid` = 1) 
     AND `episode` = (SELECT Max(episode) 
         FROM `status` 
         WHERE `tvseriesid` = 1 
           AND `season` = (SELECT Max(season) 
               FROM `status` 
               WHERE `tvseriesid` = 1)) 

回答

1

这是一种将所有信息放在一行的方法。不过,它有点简单:

select season, episode, group_concat(channel) 
from status 
where tvseriesid = 1 
group by season, episode 
order by season desc, episode desc 
limit 1; 
+0

关键是获取包含正确信息的通道列表。这很简单,并给出了我的意图。 –