mysql 统计定时记录表的最终状态

需求如下:

xxx公司(姑且表名就叫xxx)有许多项目 in (A,B,C),每个月1号会自动记录项目状态 in (x,y,z),现在要计算"目前有多少项目的最新状态为'x' "

表如下:

名称更新时间项目状态is_del
A2019-04-01a0
B2019-04-01a0
C2019-04-01a0
A2019-05-01a0
B2019-05-01b0
C2019-05-01a0
A2019-06-01a0
B2019-06-01c0
C2019-06-01a0
A2019-07-01a0
B2019-07-01c0
C2019-07-01a0
A2019-08-01b1
B2019-08-01c0
C2019-08-01a0

 

SELECT sum((SELECT 项目状态 
            FROM xxx
            WHERE 更新时间=(SELECT MAX(更新时间) 																									            
                           FROM xxx 																														 
                           WHERE is_del=0))='x') AS a
FROM   xxx

最早的思路是这样的.大概就是sum一个表里的最新状态的数据里的x数量(这句有点拗口= =)

发现并不能这样算.而且子查询里算出来也不完全是我想要的,而且sum也不能这样用,即使真要这样用的话.同一个表也要在子查询里用代号分开才行

正确sql:

SELECT COUNT(项目状态) as num
FROM xxx a
WHERE 更新时间 IN(SELECT MAX(更新时间)
                 FROM xxx b
                 WHERE a.名称=b.名称
                 AND b.is_del = 0
                 AND a.项目状态 = 'a'
                 GROUP BY 名称 )

这样写就显得很清楚了,count的查询和子查询的表要分开,然后老老实实在where里写逻辑

结果:2
说明:B最后一个月已经不是状态'x'了,C最后一个月还是状态'x',A虽然不是状态'x',但是is_del=1,所以会取到前一个月的数据,为'x'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值