获取特定列中具有唯一值的行 - MySQL

时间:2013-03-05 20:27:53

标签: mysql group-by unique

我有以下mysql查询 - :

我有一张桌子 - >

feed_id | by_id | sharer

它具有以下值 - >

 (1 , 1 , NULL)  , (2, 1, iop_23) , (3, 1, iop_23)

我运行此查询 SELECT * FROM feed WHERE by_id = 1 GROUP BY sharer ORDER BY feed_id DESC LIMIT 10

使用此查询,我尝试获取具有sharer = NULL或如果不是NULL然后是唯一值的行。

它应该返回 - > (1 , 1 , NULL) , (3, 1, iop_23)

但它正在回归 - > (1 , 1 , NULL) , (2, 1, iop_23)

3 个答案:

答案 0 :(得分:1)

它返回错误值的原因是因为select中的列不在group by中并且没有聚合函数。结果是不确定的。

如果你想要一个id最大的那个:

select s.*
from sharer s left outer join
     (select sharer, max(feed_id) as maxf
      from feed
      group by sharer
     ) sf
     on s.feed_id = maxf
where s.sharer is null or sf.sharer is not null

您需要左外连接才能获取所有NULL值。 where子句用于在一方面的NULL值和另一方面的最大id行之间进行选择。

看起来你想要每个id的{​​{1}}行加上所有具有NULL值的行。也许我误解了这个问题,但那是我的解释。

通过首先找到每个共享者的最大ID,然后将其连接回原始数据来查找这些行。

答案 1 :(得分:0)

这是GROUP BY的正确结果。要获取为组返回的最后一条记录,您需要先查询内部查询,然后在外部查询中进行分组:

SELECT * FROM (
    SELECT * FROM feed WHERE by_id = 1 ORDER BY feed_id DESC
) AS `a` GROUP BY sharer LIMIT 10

答案 2 :(得分:0)

试试这个

   SELECT max(feed_id) as feed_id ,by_id ,sharer FROM feed 
   WHERE by_id = 1 
   GROUP BY sharer 
   ORDER BY feed_id DESC LIMIT 10

DEMO HERE