如何选择5个不同的行

时间:2011-02-01 03:20:12

标签: mysql

如何为每个site_id选择5行,1,这会引发错误

SELECT DISTINCT site_id, * 
FROM deal 
WHERE site_id IN (2, 3, 4, 5, 6) 
ORDER BY id 
DESC LIMIT 5
  

您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以便在'* FROM deal WHERE site_id IN(2,3,4,5,6)ORDER BY id DESC LIMIT 5'附近使用正确的语法“

4 个答案:

答案 0 :(得分:4)

尝试使用GROUP BY

SELECT * 
FROM deal 
WHERE site_id IN (2, 3, 4, 5, 6) 
GROUP BY site_id
ORDER BY id DESC
LIMIT 5;

答案 1 :(得分:1)

如果您的表允许重复的site_ids,并且您只需要为每个site_id显示一个,那么假设ID是唯一的

SELECT * FROM deal
WHERE id in (
    SELECT max(id) maxid
    FROM deal
    WHERE site_id IN (2, 3, 4, 5, 6)
    GROUP by site_id
)

答案 2 :(得分:1)

首先为每个站点获取一个特定的交易ID(最多一个)。 (内部查询。) 然后获取每个交易ID的完整行。 (外部查询。)

SELECT * FROM deal
WHERE id in (
    SELECT max(id) maxid
    FROM deal
    WHERE site_id IN (2, 3, 4, 5, 6)
    GROUP_BY site_id
)

如果您真的有兴趣为数据库中的所有网站的每个网站获取一行,则可以删除以下行。

     WHERE site_id IN (2, 3, 4, 5, 6)

答案 3 :(得分:0)

您无法指定DISTINCT site_id并且还包含*通配符。如果要指定distinct site_id,则需要删除通配符并指定要使用的其他字段。