我正在尝试构建一个已失效的付款报告,该报告按季度显示季度数据,但会根据年份进行评估。
E.g。我想返回前几年付款的所有人的名字,但不是今年,并按季度显示结果。
到目前为止我有这个,但是让它返回正确的名字仍然是我无法想到的。
SELECT
IDNo,
Year(now()) as CurrentYear,
concat(year(pdate),'-Q',quarter(pdate)) as YrQtr,
Concat(IDNo,' - ',Fname,' ',Lname) as Fullname,
sum(amt) as Amt
FROM Payments
GROUP BY fname, lname, YrQtr
Having Sum(if(year(pdate)=Year(now()),1,0)) < 1 and (Sum(if(year(pdate)=Year(now())-1 ,1,0)) >0 or Sum(if(year(pdate)=Year(now())-2 ,1,0)) >0)
任何帮助,方向,即使让我知道这是不可能的,将不胜感激。
感谢,
编辑: 结果将显示付款人1,他在2012年或2013年但未在2014年付款,按季度分类
2012-Q1 2013-Q3
$xxx $xxx
但不是付款人2,已在2012年和2014年付款。(或任何已在2014年付款的付款人)
答案 0 :(得分:0)
我使用以下解决方案和临时表解决了这个问题;
DROP temporary table IF EXISTS LapsedRPT;'
Create temporary table LapsedRPT
SELECT IDno,
Concat(IDNo,' - ',Fname,' ',Lname) as Fullname
FROM Payments
GROUP BY FullName
having year(max(ddate)) < year(now());
Select
year(now()) as CurrentYear,
Year(pdate) as PYr,
quarter(pdate) as PQTR,
concat(year(pdate),'-Q',quarter(ddate)) as YrQtr,
Fullname,
sum(amt) as Amt
from LapsedRPT
Where year(pdate) > Year(now())-3
Group by FullName, pyr, yrQtr;