如何在mysql中基于agentID和rank获取三条记录
如何获取三个记录,即他的记录、前一个等级记录和后一个等级记录 我把SP放在下面的小提琴上:如何在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
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-抱歉,但我怎么知道这是另一个问题的结果?我被提供了一个输入和一个期望的输出,我想我的查询确实得到了这个结果,不是吗?你的小提琴乱七八糟。