Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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 Server 2008:如何获取以前的状态_Sql_Sql Server - Fatal编程技术网

SQL Server 2008:如何获取以前的状态

SQL Server 2008:如何获取以前的状态,sql,sql-server,Sql,Sql Server,我需要统计每个月当前状态为3而以前状态不是2的人。SQL如下所示: SELECT MONTH, COUNT(PERSON_ID) AS COUNT FROM STATUS S WHERE STATUS = 3 AND 'PREVIOUS_STATUS' <> 2 GROUP BY MONTH 如果月份以合理的格式存储,则可以使用外部应用: 如果月份以合理的格式存储,则可以使用外部应用: 月份字段是什么类型的?你为什么对我大喊大叫?我

我需要统计每个月当前状态为3而以前状态不是2的人。SQL如下所示:

SELECT  
    MONTH,
    COUNT(PERSON_ID) AS COUNT
FROM 
    STATUS S
WHERE 
    STATUS = 3 AND 'PREVIOUS_STATUS' <> 2
GROUP BY 
    MONTH
如果月份以合理的格式存储,则可以使用外部应用:

如果月份以合理的格式存储,则可以使用外部应用:


月份字段是什么类型的?你为什么对我大喊大叫?我什么都没做!!11111!不,说真的,没什么害处,但是在普通文本中使用大写锁定有点不礼貌。@melpomene:stringHaha,祝你好运。月份字段是什么类型的?你为什么对我大喊大叫?我什么都没做!!11111!不,说真的,没什么害处,但是在普通文本中使用大写锁定是有点不礼貌的。@melpomene:stringHaha,祝你好运。谢谢你的快速回复!sql为我提供了所有月份的数据。如何获取特定时间段的数据,例如“2015年7月”至“2016年6月”?谢谢@冰您将在外部查询中添加where子句。感谢您的快速回复!sql为我提供了所有月份的数据。如何获取特定时间段的数据,例如“2015年7月”至“2016年6月”?谢谢@冰您将向外部查询添加where子句。
   Person_ID            Status       Month
  -------------------------------------------
    101                    1          07/15
    101                    2          09/15
    101                    3          12/15
    102                    1          02/15
    102                    3          05/15
    103                    1          03/16
    ...                   ...          ...
select month, count(*)
from status s outer apply
     (select top 1 s2.*
      from status s2
      where s.person_id = s2.person_id and s2.month < s.month
      order by s2.month desc
     ) as sprev
where s.status = 3 and (sprev.status is null or sprev.status = 2)
group by month;