I want to get 5 emails of every account of Inbox
folder from "Mails" Table
Table contain field of MailAccountID.
Table details:
Table Name: Mails
Folder field: FolderName
Email Account field: MailAccountID
I have tried solution suggested. It works fine If I execute query in MySQL query window but it throw so many errors as Stored Procedure.
Stored Procedure:
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
/*
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
result
+------+---------------+------------+------------+------+------+
| 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 |
+------+---------------+------------+------------+------+------+