我想从“邮件”表中获取Inbox
文件夹的每个帐户的5封电子邮件
表包含MailAccountID字段。
Table details:
Table Name: Mails
Folder field: FolderName
Email Account field: MailAccountID
我试过建议的解决方案。它工作正常如果我在MySQL查询窗口中执行查询,但它会像存储过程那样抛出很多错误。
存储过程:
CREATE PROCEDURE `SP_GetMailAccountData`()
BEGIN
select * from
(
select m.*,
if(m.mailaccountid <> @prev ,@rn:=1,@rn:=@rn+1) rn,
@prev:=m.mailaccountid prev
from (select @rn:=0,@prev:='') p, mails m
where foldername = 'inbox'
order by m.mailaccountid,m.dt desc
) s
where s.rn <= 3;
END
答案 0 :(得分:0)
/*
create table mails(id int,mailaccountid int,foldername varchar(6),dt date);
truncate table mails;
insert into mails values
(1,1,'inbox','2016-08-01'),
(2,1,'inbox','2016-08-02'),
(3,1,'inbox','2016-08-03'),
(4,2,'outbox','2016-08-01'),
(5,2,'inbox','2016-08-02'),
(6,2,'inbox','2016-08-03'),
(7,3,'inbox','2016-08-01'),
(8,3,'outbox','2016-08-02'),
(9,3,'inbox','2016-08-03'),
(10,4,'inbox','2016-08-03'),
(10,4,'inbox','2016-08-03'),
(10,4,'inbox','2016-08-03'),
(10,4,'inbox','2016-08-04'),
(10,4,'inbox','2016-08-05')
;
*/
select * from
(
select m.*,
if(m.mailaccountid <> @prev ,@rn:=1,@rn:=@rn+1) rn,
@prev:=m.mailaccountid prev
from (select @rn:=0,@prev:='') p, mails m
where foldername = 'inbox'
order by m.mailaccountid,m.dt desc
) s
where s.rn <= 3
结果
+------+---------------+------------+------------+------+------+
| id | mailaccountid | foldername | dt | rn | prev |
+------+---------------+------------+------------+------+------+
| 3 | 1 | inbox | 2016-08-03 | 1 | 1 |
| 2 | 1 | inbox | 2016-08-02 | 2 | 1 |
| 1 | 1 | inbox | 2016-08-01 | 3 | 1 |
| 6 | 2 | inbox | 2016-08-03 | 1 | 2 |
| 5 | 2 | inbox | 2016-08-02 | 2 | 2 |
| 9 | 3 | inbox | 2016-08-03 | 1 | 3 |
| 7 | 3 | inbox | 2016-08-01 | 2 | 3 |
| 10 | 4 | inbox | 2016-08-05 | 1 | 4 |
| 10 | 4 | inbox | 2016-08-04 | 2 | 4 |
| 10 | 4 | inbox | 2016-08-03 | 3 | 4 |
+------+---------------+------------+------------+------+------+