我有这张桌子:
id
feed_id
...
假设我有500行,我想为每个feed_id选择3个条目?总数上限为50。
如何编写此SQL?
答案 0 :(得分:3)
您是否尝试过使用子选择并限制?
像
这样的东西SELECT *
FROM Table t
WHERE ID IN (SELECT ID FROM @Table WHERE FEED_ID = t.FEED_ID LIMIT 3)
LIMIT 500
答案 1 :(得分:3)
使用:
SELECT x.feedid
FROM (SELECT t.feedid,
CASE WHEN @feed != t.feedid THEN @rownum := 1 ELSE @rownum := @rownum + 1 END AS rank,
@feed := t.feedid
FROM TABLE t
JOIN (SELECT @rownum := NULL, @feed := 0) r
ORDER BY t.feedid) x
WHERE x.rank <= 3
ORDER BY x.feedid
LIMIT 50
不清楚的是您要返回的内容的详细信息 - 表格中的所有行,或者只是Feedid。
答案 2 :(得分:0)
在transact SQL中你会使用TOP语句,不确定这是否适用于此......
答案 3 :(得分:0)
您可以借助存储过程来完成此操作。
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_feed`()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE a INT;
DECLARE cur1 CURSOR FOR SELECT id FROM test.id LIMIT 50;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
REPEAT
FETCH cur1 INTO a;
IF NOT done THEN
SELECT * FROM feed_id WHERE id=a LIMIT 3;
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
END$$
DELIMITER;