首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取每个联接列的有限行数

获取每个联接列的有限行数
EN

Stack Overflow用户
提问于 2016-03-17 14:15:50
回答 1查看 44关注 0票数 0

到目前为止,我有以下SQL语句:

代码语言:javascript
运行
复制
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 

邮件列表表

代码语言:javascript
运行
复制
+--------+-------+--------+--------+-----+
| 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      |
+--------+-------+--------+--------+-----+

期望结果

代码语言:javascript
运行
复制
+--------+-------+--------+--------+-----+
| 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,而国外的通讯是来自客户的最早的。

现在,我只希望每个由子subselect返回的时事通讯返回最大10行mail_list。

示例:

到目前为止,我通过这个SQL获得了21个结果,其中3个mail_lists属于时事通讯8,18个结果属于时事通讯9,但是新闻稿9的结果数量应该只有10个。

我怎么能用SQL来完成这个任务呢?这有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-17 14:41:56

例如:

代码语言:javascript
运行
复制
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;

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

例如:

代码语言:javascript
运行
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36063168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档