Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
Oracle SQL有助于以两种不同的方式计算同一事物,但有共同的分组_Sql_Oracle - Fatal编程技术网

Oracle SQL有助于以两种不同的方式计算同一事物,但有共同的分组

Oracle SQL有助于以两种不同的方式计算同一事物,但有共同的分组,sql,oracle,Sql,Oracle,我有一个表,每个条目都包含一个事件id、状态(比如打开或关闭)、日期、提出日期和结束日期 我想显示一个统计在关闭日期关闭的事件数的表,以便status='closed'和closed_date处的事件\u id计数不为空,以及在同一天status='open'处的事件\u id计数保持打开的事件数 如果我把你弄糊涂了,一张像这样的桌子: ______________________________________________________________________________

我有一个表,每个条目都包含一个事件id、状态(比如打开或关闭)、日期、提出日期和结束日期

我想显示一个统计在关闭日期关闭的事件数的表,以便status='closed'和closed_date处的事件\u id计数不为空,以及在同一天status='open'处的事件\u id计数保持打开的事件数

如果我把你弄糊涂了,一张像这样的桌子:

 ______________________________________________________________________________
| closure date | count of incidents closed | count of incidents remaining open |
|--------------|---------------------------|-----------------------------------|
| 01-Sep-12    | 5                         | 14                                |
| ...          | ...                       | ...                               |
SELECT COUNT(incident_id)
WHERE closure_date IS NOT NULL AND status="open"
GROUP BY closure_date
SELECT 
closure_date,
SUM(CASE WHEN status="open" 
         THEN 1 ELSE 0 END) AS "count of incidents open",
SUM(CASE WHEN  status="closed" 
         THEN 1 ELSE 0 END) AS "count of incidents closed"
FROM YourTable
WHERE closure_date IS NOT NULL
GROUP BY closure_date
SELECT t1.closure_date, COUNT(t1.incident_id)
     , ( SELECT COUNT(t2.incident_id) FROM incident_table t2
          WHERE t2.status = 'open'
            AND t2.raised_date < t1.closure_date )
  FROM incident_table t1
 WHERE t1.closure_date IS NOT NULL
   AND t1.status = 'closed'
 GROUP BY t1.closure_date
我管理了一个表,该表可以计算这样结束的事件数:

 ______________________________________________________________________________
| closure date | count of incidents closed | count of incidents remaining open |
|--------------|---------------------------|-----------------------------------|
| 01-Sep-12    | 5                         | 14                                |
| ...          | ...                       | ...                               |
SELECT COUNT(incident_id)
WHERE closure_date IS NOT NULL AND status="open"
GROUP BY closure_date
SELECT 
closure_date,
SUM(CASE WHEN status="open" 
         THEN 1 ELSE 0 END) AS "count of incidents open",
SUM(CASE WHEN  status="closed" 
         THEN 1 ELSE 0 END) AS "count of incidents closed"
FROM YourTable
WHERE closure_date IS NOT NULL
GROUP BY closure_date
SELECT t1.closure_date, COUNT(t1.incident_id)
     , ( SELECT COUNT(t2.incident_id) FROM incident_table t2
          WHERE t2.status = 'open'
            AND t2.raised_date < t1.closure_date )
  FROM incident_table t1
 WHERE t1.closure_date IS NOT NULL
   AND t1.status = 'closed'
 GROUP BY t1.closure_date
我已经试了几个小时让另一个计数工作,但到目前为止还不能:-

编辑:以下是我的表格示例:

 ___________________________________________________
| incident_id | status | date_raised | closure_date |
|-------------|--------|-------------|--------------|
| 1           | closed | 01-Sep-12   | 01-Sep-12    |
| 2           | open   | 30-Aug-12   | (null)       |
| 3           | open   | 02-Sep-12   | (null)       |
| 4           | closed | 02-Sep-12   | 05-Sep-12    |
| ...         | ...    | ...         | ...          |
我将向各位介绍:

 ______________________________________________________________________________
| closure date | count of incidents closed | count of incidents remaining open |
|--------------|---------------------------|-----------------------------------|
| 01-Sep-12    | 1                         | 1                                 |
| 05-Sep-12    | 1                         | 2                                 |

您应该尝试以下方法:

 ______________________________________________________________________________
| closure date | count of incidents closed | count of incidents remaining open |
|--------------|---------------------------|-----------------------------------|
| 01-Sep-12    | 5                         | 14                                |
| ...          | ...                       | ...                               |
SELECT COUNT(incident_id)
WHERE closure_date IS NOT NULL AND status="open"
GROUP BY closure_date
SELECT 
closure_date,
SUM(CASE WHEN status="open" 
         THEN 1 ELSE 0 END) AS "count of incidents open",
SUM(CASE WHEN  status="closed" 
         THEN 1 ELSE 0 END) AS "count of incidents closed"
FROM YourTable
WHERE closure_date IS NOT NULL
GROUP BY closure_date
SELECT t1.closure_date, COUNT(t1.incident_id)
     , ( SELECT COUNT(t2.incident_id) FROM incident_table t2
          WHERE t2.status = 'open'
            AND t2.raised_date < t1.closure_date )
  FROM incident_table t1
 WHERE t1.closure_date IS NOT NULL
   AND t1.status = 'closed'
 GROUP BY t1.closure_date

在我看来,对于每个日期,您都希望获得迄今为止已关闭的问题的数量,以及在该日期之前提出的尚未解决的问题的数量,对吗?所以你可能想要这样的东西:

 ______________________________________________________________________________
| closure date | count of incidents closed | count of incidents remaining open |
|--------------|---------------------------|-----------------------------------|
| 01-Sep-12    | 5                         | 14                                |
| ...          | ...                       | ...                               |
SELECT COUNT(incident_id)
WHERE closure_date IS NOT NULL AND status="open"
GROUP BY closure_date
SELECT 
closure_date,
SUM(CASE WHEN status="open" 
         THEN 1 ELSE 0 END) AS "count of incidents open",
SUM(CASE WHEN  status="closed" 
         THEN 1 ELSE 0 END) AS "count of incidents closed"
FROM YourTable
WHERE closure_date IS NOT NULL
GROUP BY closure_date
SELECT t1.closure_date, COUNT(t1.incident_id)
     , ( SELECT COUNT(t2.incident_id) FROM incident_table t2
          WHERE t2.status = 'open'
            AND t2.raised_date < t1.closure_date )
  FROM incident_table t1
 WHERE t1.closure_date IS NOT NULL
   AND t1.status = 'closed'
 GROUP BY t1.closure_date

嗯,事实上不太清楚,也许:你的表的主键是什么?事故识别码?意味着事件不能有两种状态?或也许真正的表结构或一些示例数据会有所帮助…@Raphael incident_id是主键。该表包含事件id、提出日期、结束日期和状态。因此,如果状态为“打开”,则关闭日期将为空。如果状态为关闭,则将有一个关闭日期。下面的解决方案没有显示给定关闭日期当天或之前的开放事件数量,但显示了关闭日期上的关闭数量date@RaphaëlAlthaus我在问题中添加了一个数据示例表OK,编辑了我的答案,应该会更好。顺便说一下,我删除了闭包日期不是空测试,因为我认为关闭状态意味着关闭日期不是空的,而是关闭的,但是打开计数不仅需要状态=“打开”,而且还需要以某种方式提出的日期<[集团的关闭日期],我不知道这是否可能:-S@BenHill对完成。哦,好吧,烧焦了;不幸的是,你被打败了但我离得很近@本希尔,如果你觉得我的回答有帮助的话,也请投赞成票。谢谢我一到15点就来P