SQL 如何计算相同ID的增加和减少的数量 10C

图片说明
每天自动往一张表中插入相同ID不同日期的数据;现在要从表中按日期查询提取某个时间段所有ID的第一次插入数量,中间所有减少的数量之和,和中间所有增加的数量之和。如:1~3号 ID 为1的插入数量分别为20,10,30.此时查询出来显示只有一条ID1的原数量是20,减少数量10,增加数量20,结余数量30.这个要如何实现,尽量简单

2个回答

就你的表,看不出哪个是原数量,哪个是减少数量,哪个是增加数量
建议你减少数量用负数表示,这样可以
select sum(sl) from table group by id

qq_33559493
qq_33559493 我这个表里面,最右边的数量就是原数量,然后现在要通过这个原数量插入的数据变动来计算出减少数量和增加数量
5 个月之前 回复

先将你查询的时间范围的数据按照id和kcid由小到大进行排序,然后查出相同id相邻的两个纪录之间的差值(kcid大的对应sl减kcid小的对应sl),最后按照id进行分组min(kcid)对应sl为原数量,差值小于0的相加为减少量,差值大于0的相加为增加量,max(kcid)对应sl为结余数量
SELECT t3.id,t4.sl AS 原始量,t3.reduce_sl AS 减少量,t3.increase_sl AS 增加量,t5.sl AS 结余数量
FROM
(SELECT t.id,MIN(kcid) AS min_kcid,
sum(CASE WHEN change_sl sum(CASE WHEN change_sl>0 THEN change_sl ELSE 0 END) increase_sl
,MAX(kcid) AS max_kcid
FROM
(SELECT CASE WHEN @id=t1.id THEN t1.sl-@sl ELSE 0 END AS change_sl,
@id:=t1.id AS id,@sl:=t1.sl AS sl,t1.kcid
FROM (查询的时间范围的数据按照id和kcid由小到大进行排序的子查询) t1,(SELECT @id:=0,@sl:=0) t2) t
GROUP BY 1
) t3
LEFT JOIN
(查询的时间范围的数据按照id和kcid由小到大进行排序的子查询) t4
ON
t3.id=t4.id AND t3.min_kcid=t4.kcid
LEFT JOIN
(查询的时间范围的数据按照id和kcid由小到大进行排序的子查询) t5
ON
t3.id=t5.id AND t3.max_kcid=t5.kcid
大概就是这样写的

qq_33559493
qq_33559493 这个类似的代码如何实现。。。 方法能想到,数据库我不太行
5 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问