如何在mysql中基于agentID和rank获取三条记录

如何在mysql中基于agentID和rank获取三条记录,mysql,Mysql,如何获取三个记录,即他的记录、前一个等级记录和后一个等级记录 我把SP放在下面的小提琴上: DELIMITER $$ CREATE DEFINER=`ntc`@`%` PROCEDURE `stckrank`() BEGIN SELECT AgentID, current_day_amount, month_amount, year_amount, @Position:=@Position + 1 AS `Rank` FROM ( SELECT jus

如何获取三个记录,即他的记录、前一个等级记录和后一个等级记录 我把SP放在下面的小提琴上:

 DELIMITER $$

 CREATE DEFINER=`ntc`@`%` PROCEDURE `stckrank`()
BEGIN
SELECT AgentID, 
    current_day_amount, 
    month_amount, 
    year_amount,
    @Position:=@Position + 1 AS `Rank`
FROM
(
SELECT just_agent.AgentID, 
        total_current_date.Totoalamountperday AS current_day_amount, 
        total_current_month.Totoalamountpermonth AS month_amount, 
        total_year.Totoalamountperyear AS year_amount
     FROM
(
    SELECT DISTINCT AgentID
    FROM collection
) just_agent
LEFT OUTER JOIN
(
    select AgentID, SUM(AmountRecevied) as Totoalamountperday
    from collection
    where  day(Date_Time) = day(CURRENT_DATE())
    group by AgentID
) total_current_date
ON just_agent.AgentID = total_current_date.AgentID
LEFT OUTER JOIN
(
    select AgentID, sum(AmountRecevied) as Totoalamountpermonth
    from collection
    where  date_time between DATE_FORMAT(NOW(), '%Y-%m-01') and LAST_DAY(now() - interval 0 month) 
    group by AgentID
) total_current_month
ON just_agent.AgentID = total_current_month.AgentID
LEFT OUTER JOIN
(
    select AgentID, sum(AmountRecevied) as Totoalamountperyear
    from collection
    where  year(Date_Time) = YEAR(CURRENT_DATE()) 
    group by AgentID
) total_year
ON just_agent.AgentID = total_year.AgentID
ORDER BY total_year.Totoalamountperyear DESC
) Sub1
 CROSS JOIN (SELECT @Position:=0) Sub2;
END
输出:

agentiid dayamount monthamount yearamount rank
 2        3000       4000          7000   1
 1        2000      3000           5000   2
 3         200       300            500   3
 4         100       100            200    4
现在,如果我选择代理id 2,我需要得到下面的记录,上面没有记录,所以null或0应该显示

选择代理id-2 需要展示或获得 他的等级记录和之后的记录

agentiid dayamount monthamount yearamount rank
    2        3000       4000          7000   1
    1        2000      3000           5000   2

您可以在列组条件下将表连接到自身:

SELECT t2.*
FROM yourTable t1
JOIN yourTable t2
ON ABS(t1.rank - t2.rank) <= 1.5 --is this what you want ?
WHERE t1.agentiid = 2
选择t2*
从您的表t1
加入您的表t2

在ABS(t1.rank-t2.rank)上,你在这里检查过我的小提琴了吗?我想先确定我有表agentid,amonreceived,datetime在这里amonreceived列我分为三列sum(daymount),sum(monthamount),sum(yearamount)其中agentid=agentid使用StoredProcess,因为我分配了排名,所以我询问如何执行。我将每个select查询分配为表,所以我询问如何执行sp@M.Massias-这是从另一个问题开始的(小提琴是我对另一个问题的回答)。我认为这里的基本概念可以完成这项工作,只需使用SQLFIDLE中的查询作为子查询,而不是使用SQL中的表(我认为需要更改变量名,否则列组可能会损坏)。但我很怀疑的是会不会很快@Kickstart-抱歉,但我怎么知道这是另一个问题的结果?我被提供了一个输入和一个期望的输出,我想我的查询确实得到了这个结果,不是吗?你的小提琴乱七八糟。