0

我有以下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)

4

3 回答 3

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,然后将其连接回原始数据来找到这些行。

于 2013-03-05T20:34:02.060 回答
0

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

SELECT * FROM (
    SELECT * FROM feed WHERE by_id = 1 ORDER BY feed_id DESC
) AS `a` GROUP BY sharer LIMIT 10
于 2013-03-05T20:33:23.170 回答
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

在这里演示

于 2013-03-05T20:40:46.077 回答