2013-03-05 126 views
0

我有以下MySQL查询 - :获取与独特价值的行中特定的列 - 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)

回答

0

这是一个为GROUP BY正确的结果。要获得该组返回的最后一个记录,你需要一个内部查询先进行排序,然后组在外部查询:

SELECT * FROM (
    SELECT * FROM feed WHERE by_id = 1 ORDER BY feed_id DESC 
) AS `a` GROUP BY sharer LIMIT 10 
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为每个sharer加上所有具有NULL值的行。也许我误解了这个问题,但那是我的解释。

这通过首先找到最大ID为每个共享者,然后加入此回原始数据发现的那些行。

+0

请你能解释一下@Gordon Linoff – sanchitkhanna26 2013-03-05 20:35:35

+0

你解释它是正确的。谢谢@Gordon Linoff – sanchitkhanna26 2013-03-05 20:40:45

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