Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 使用SQL统计特定时间处于特定状态的案例_Sql Server_Tsql_Sql Server 2000 - Fatal编程技术网

Sql server 使用SQL统计特定时间处于特定状态的案例

Sql server 使用SQL统计特定时间处于特定状态的案例,sql-server,tsql,sql-server-2000,Sql Server,Tsql,Sql Server 2000,我需要开发一个查询,该查询将统计每月“未结”案件的总数。 我有一个带有id和名称的“cases”表,还有一个带有datetime列、caseid列和state的“state\u changes”表 我如何计算每个月有“开放”状态记录但没有相应“关闭”状态记录的案例数量 我正在使用SQL server 2000。这应该可以让您接近(T-SQL): 这将使您接近(T-SQL): 为打开事件和关闭事件创建状态更改表查询 创建一个查询,对从两个查询返回案例ID的案例ID执行打开到关闭的外部联接 对于“c

我需要开发一个查询,该查询将统计每月“未结”案件的总数。 我有一个带有id和名称的“cases”表,还有一个带有datetime列、caseid列和state的“state\u changes”表

我如何计算每个月有“开放”状态记录但没有相应“关闭”状态记录的案例数量

我正在使用SQL server 2000。

这应该可以让您接近(T-SQL):

这将使您接近(T-SQL):


为打开事件和关闭事件创建状态更改表查询

创建一个查询,对从两个查询返回案例ID的案例ID执行打开到关闭的外部联接

对于“close”事件查询的ID为空的行,查询后一个查询结果

计算后一个查询结果中的行数

非常粗略地说(从我的头顶上,没有纠正):


为打开事件和关闭事件创建状态更改表查询

创建一个查询,对从两个查询返回案例ID的案例ID执行打开到关闭的外部联接

对于“close”事件查询的ID为空的行,查询后一个查询结果

计算后一个查询结果中的行数

非常粗略地说(从我的头顶上,没有纠正):


视情况而定。未来的案例可能不是不可能的,既然OP明确提到了这一点……谢谢,我同意这一点。现在的问题是我需要知道每个月a的计数,这与案件日期的月份不同。当我有一些东西时,我会尝试更新。你需要一个从1到12的小帮助表,这样你就有了加入和分组的东西。这取决于。未来的案例可能不是不可能的,既然OP明确提到了这一点……谢谢,我同意这一点。现在的问题是我需要知道每个月a的计数,这与案件日期的月份不同。当我有一些东西时,我会尝试更新。你需要一个从1到12的小帮助表,这样你就有东西可以加入和分组。很好,虽然现在我必须弄清楚如何按月分组。虽然现在我必须弄清楚如何按月分组
SELECT
  MONTH(s.casedate) m,
  YEAR(s.casedate)  y,
  COUNT(DISTINCT c.caseid)   count_cases
FROM
  cases c
  INNER JOIN state_changes s ON s.caseid = c.caseid
WHERE
  s.state = 'open'           /* "with state 'open'" */
  AND s.casedate < GETDATE() /* "in the past" */
  AND NOT EXISTS (           /* "without corresp. record with state 'closed'" */
    SELECT 1 FROM state_changes i WHERE i.caseid = s.caseid AND i.state = 'closed'
  )
GROUP BY
  MONTH(s.casedate),
  YEAR(s.casedate)
SELECT
  m.month,
  COUNT(DISTINCT c.caseid) count_cases
FROM
  cases c
  INNER JOIN state_changes s ON s.caseid = c.caseid
  LEFT  JOIN month         m ON m.month  = MONTH(s.casedate)
WHERE
  s.state = 'open'
  AND YEAR(c.createddate) = YEAR(GETDATE())  /* whatever */
  AND NOT EXISTS (
    SELECT 1 FROM state_changes i WHERE i.caseid = s.caseid AND i.state = 'closed'
  )
GROUP BY
  m.month
ORDER BY
  m.month
SELECT COUNT (T1.CaseID) FROM (SELECT T1.CaseID AS T1_CaseID, T2.CaseID AS T2_CaseID 
FROM ((SELECT CaseID FROM state_changes WHERE state = 'open' AND timestamp BETWEEN 1-Jan-09 AND 30-Jan-09) AS T1 OUTER JOIN (SELECT CaseID FROM state_changes WHERE state = 'closed' AND timestamp BETWEEN 1-Jan-09 AND 30-Jan-09) AS T2 ON T1.CaseID = T2.CaseID)) WHERE T2_CaseID = NULL