Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql查询和计数_Sql_Count_Sum_Aggregate Functions - Fatal编程技术网

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引擎和版本是什么