gpt4 book ai didi

mysql - 获取每个连接列的有限行数

转载 作者:行者123 更新时间:2023-11-29 11:39:27 25 4
gpt4 key购买 nike

现在我有以下 SQL 语句:

SELECT m . *
FROM newsletter_mail_list m
INNER JOIN (
SELECT n.id
FROM newsletter n
GROUP BY n.customer_id
ORDER BY n.id ASC
) b ON m.newsletter_id = b.id
WHERE m.sent_date IS NULL

邮件列表表

+--------+-------+--------+--------+-----+
| id | newsletter_id | email | sent_date |
+--------+-------+--------+--------+-----+
| 1 | 8 | abcd | today |
| 2 | 8 | cfdf | NULL |
| 3 | 8 | afdg | NULL |
| 4 | 9 | zfbh | NULL |
| 5 | 9 | eerg | NULL |
| 6 | 9 | ertg | NULL |
| 7 | 9 | zfbh | NULL |
| 8 | 9 | eerg | NULL |
| 9 | 9 | ertg | NULL |
| 10 | 9 | zfbh | NULL |
| 11 | 9 | eerg | NULL |
| 12 | 9 | ertg | NULL |
| 13 | 9 | zfbh | NULL |
| 14 | 9 | eerg | NULL |
| 15 | 9 | ertg | NULL |
| 16 | 9 | zfbh | NULL |
| 17 | 9 | eerg | NULL |
| 18 | 9 | ertg | NULL |
+--------+-------+--------+--------+-----+

期望的结果

+--------+-------+--------+--------+-----+
| id | newsletter_id | email | sent_date |
+--------+-------+--------+--------+-----+
| 2 | 8 | cfdf | NULL |
| 3 | 8 | afdg | NULL |
| 4 | 9 | zfbh | NULL |
| 5 | 9 | eerg | NULL |
| 6 | 9 | ertg | NULL |
| 7 | 9 | zfbh | NULL |
| 8 | 9 | eerg | NULL |
| 9 | 9 | ertg | NULL |
| 10 | 9 | zfbh | NULL |
| 11 | 9 | eerg | NULL |
| 12 | 9 | ertg | NULL |
| 13 | 9 | zfbh | NULL |
+--------+-------+--------+--------+-----+

这给了我所有的mail_list行,其中sent_date为NULL,并且外国时事通讯是来自客户的最旧的。

现在我只想为子选择返回的每个新闻通讯最多返回 10 个 mail_list 行。

示例:

到目前为止,我通过此 SQL 获得了 21 个结果,其中 3 个邮件列表属于新闻通讯 8,18 个结果属于新闻通讯 9。但时事通讯 9 的结果数应该只有 10 个。

我怎样才能用 SQL 做到这一点?这可能吗?

最佳答案

例如:

SELECT x.*
FROM mail_list x
JOIN mail_list y
ON y.newsletter_id = x.newsletter_id
AND y.id <= x.id
WHERE x.sent_date IS NULL
GROUP
BY newsletter_id
, id
HAVING COUNT(*) <= 10;

如果性能是一个问题,那么使用变量的解决方案会更快......

例如:

SELECT id
, newsletter_id
, email
FROM
( SELECT x.*
, CASE WHEN @prev=newsletter_id
THEN @i:=@i+1
ELSE @i:=1 END i
, @prev:=newsletter_id prev
FROM mail_list x
, (SELECT @prev:='',@i:=0) vars
WHERE sent_date IS NULL
ORDER
BY newsletter_id, id
) a
WHERE i <= 10;

关于mysql - 获取每个连接列的有限行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36063168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com