我正在尝试按时间计算销售单位剩余的总购买单位。下面是我的示例表和下面的所需输出。
fno pno vdate pdate units ttype
1234 1 1-Jan-2011 1-Jan-2011 100 p
12 1 1-Jan-2012 1-Jan-2011 100 p
1234 1 1-Jan-2012 1-Jan-2011 100 p
1234 1 1-Jan-2012 1-Jan-2011 100 p
12 1 1-Jan-2013 1-Jan-2011 100 s
1234 1 1-Jan-2013 1-Jan-2011 150 s
输出应为
fno pno vdate pdate units ttype
1234 1 1-Jan-2012 1-Jan-2011 50 p
1234 1 1-Jan-2012 1-Jan-2011 100 p
此处ttype
是交易类型' s'意味着销售和' p'意味着购买。我想有SQL查询,它可以根据购买的订单计算单位。
如果看看2011年1月1日的1234 fno,购买了100个单位,第二次购买是在2012年1月1日,每个100单位。同样的交易发生在fno = 12,单位为100(购买),100个单位已于2013年1月1日售出。
这是SQL
select (t3.pUnits - t2.sUnits) as sb, t1.fno, t1.ttype, t1.vdate from
dbtrans as t1
left join (
select sum(units) as sUnits, fno, pno
from dbtrans
group by fno, pno, ttype having ttype = 's'
) as t2 on t1.fno = t2.fno
left join (
select sum(units) as pUnits, fno, pno
from dbtrans
group by fno, pno, ttype having ttype = 'p'
) as t3 on t1.fno = t3.fno
group by t1.vdate
因此,应根据事务类型以vdate为基础进行计算。
如果我遗失了什么,请告诉我。
提前致谢。