GROUP BY查询未按预期排序

时间:2010-09-15 17:38:38

标签: sql mysql group-by

我不知道为什么我不能按照我想要的方式进行查询,希望你能开导我。

   SELECT e.id,
          e.num,
          e.name,
          s.name as s_name,
          t.num as t_num,
          e.show_id  
     FROM s_episodes e  
LEFT JOIN shows s ON s.id = e.show_id  
LEFT JOIN s_seasons t ON t.id = e.season_id  
 GROUP BY e.show_id  
 ORDER BY e.dateadded DESC

dateadded是一个int(unix timepost)。 e.num,t.num也是int。

是否应该显示添加的最新剧集,但是当GROUP BY对行进行分组时,列出的剧集不是最新剧集,而是最新一季(剧集编号由e.num表示)的最新剧集(季节)节目的数字由t_num表示(但是,节目按照最新剧集的日期排序,但是所列的剧集是本季的第一集,而不是最后一集)。

有什么想法吗?

我希望自己明白,对任何英语错误感到抱歉。感谢。

2 个答案:

答案 0 :(得分:3)

当您按一个字段分组并且结果字段不是它的一部分时(或者在您的情况下是按字段的顺序),结果是不可预测的。

您需要将其添加到分组依据 或者在您的情况下,使用聚合函数:

ORDER BY MAX(e.dateadded) DESC

修改: 你真的需要LEFT JOIN或者那些可能是常规的内连接吗?

由于您还需要显示最新一集的字段,您可以尝试:

   SELECT e.id,
          e.num,
          e.name,
          s.name as s_name,
          t.num as t_num,
          e.show_id  
     FROM shows s
     JOIN s_episodes e ON e.id = 
              (SELECT id 
                 FROM s_episodes 
                WHERE show_id = s.id 
                ORDER BY dateadded DESC LIMIT 1)
LEFT JOIN s_seasons t ON t.id = e.season_id  
 ORDER BY e.dateadded DESC

答案 1 :(得分:0)

您需要先确定为给定节目添加的最新剧集。然后你可以添加其余的数据。

SELECT a.dateadded,
      e.id, 
          e.num, 
          e.name, 
          s.name as s_name, 
          t.num as t_num, 
          e.show_id   

from          
(select max(dateadded) maxdate, show_id
     FROM s_episodes 
     group by show_id)a
inner join s_episodes e
      on e.show_id = a.show_id
      and e.dateadded = a.maxdate
LEFT JOIN shows s ON s.id = e.show_id   
LEFT JOIN s_seasons t ON t.id = e.season_id