sql查询和计数
我有一张桌子sql查询和计数,sql,count,sum,aggregate-functions,Sql,Count,Sum,Aggregate Functions,我有一张桌子 id date state 1 10.01.01 reg 2 08.01.01 reg 3 05.01.01 check 4 02.01.01 check 5 01.01.01 reg 想展示这样的结果吗 count reg 5 1 e、 g仅当先前状态为“检查”时,才应计算“reg”状态的总和。 请帮助我或给出正确的解决方法,在SQL Server 2012及以上版本中,您可以使用LAG访问前一行值: SQL SERV
id date state
1 10.01.01 reg
2 08.01.01 reg
3 05.01.01 check
4 02.01.01 check
5 01.01.01 reg
想展示这样的结果吗
count reg
5 1
e、 g仅当先前状态为“检查”时,才应计算“reg”状态的总和。
请帮助我或给出正确的解决方法,在SQL Server 2012及以上版本中,您可以使用LAG访问前一行值: SQL SERVER 2012
;WITH MyCTE AS
(
select id, date,state,lag(state,1) over(order by id) as prevstate
from Table1
)
SELECT COUNT(*),SUM(CASE WHEN state = 'reg' AND prevstate = 'check' THEN 1 ELSE 0 END)
FROM MyCTE
ORACLE
With T AS
(
select "id", "date", "state", lag("state",1) over(order by "id") as "prevstate"
from Table1
)
SELECT COUNT(*),SUM(CASE WHEN "state" = 'reg' AND "prevstate" = 'check' THEN 1 ELSE 0 END)
FROM T
MySQL
SELECT COUNT(*),SUM(CASE WHEN state = 'reg' AND prevstate = 'check' THEN 1 ELSE 0 END)
FROM
(
SELECT T1.ID,T1.Date,T1.state,T2.state AS prevstate
FROM Table1 T1
LEFT JOIN Table1 T2
ON T1.ID - 1 = T2.ID
) AS T
事实上,第三种情况几乎适用于所有情况。您的DB引擎和版本是什么