SQL-基于日期统计新记录的数量

SQL-基于日期统计新记录的数量,sql,Sql,我有一个每小时刷新一次的表,其中包含唯一的案例ID。我需要返回以下内容: 未结案件总数(库存) 前一小时表中未列出的小时内活动案例计数(新) 前一小时在表中但不在当前小时的案例计数(已结束) 试试这个,当然,你的表名和列名会取代我的猜测。这纯属虚构;我没有建立一个测试环境,所以可能有打字错误或其他愚蠢的地方。我们会解决的。。如果出现错误或意外结果,请告诉我 with opencases as (select * from tblCase where datediff(hour,c

我有一个每小时刷新一次的表,其中包含唯一的案例ID。我需要返回以下内容:

  • 未结案件总数(库存)
  • 前一小时表中未列出的小时内活动案例计数(新)
  • 前一小时在表中但不在当前小时的案例计数(已结束)


    • 试试这个,当然,你的表名和列名会取代我的猜测。这纯属虚构;我没有建立一个测试环境,所以可能有打字错误或其他愚蠢的地方。我们会解决的。。如果出现错误或意外结果,请告诉我

      with
         opencases as (select * from tblCase
         where datediff(hour,casedate,getdate()) = 0),
         prevcases as (select * from tblCase where datediff(hour,casedate,getdate()) = 1)
      select
      case when o.currdate is not null then o.currdate else p.currdate end as 'Date / Time',
      case when o.worklevel is not null then o.worklevel else p.worklevel end as 'Work Level',
      count(o.case_id) as 'Inventory',
      sum(
         case
            when o.case_id is NOT NULL and p.case_id is NULL then 1 else 0
         end) as 'New',
      sum(
         case
            when o.case_id is NULL and p.case_id is NOT NULL then 1 else 0
         end) as 'Closed'
      from prevcases p
      full outer join opencases o
      on o.case_id = p.case_id
      group by
      o.currdate desc,
      p.currdate desc,
      o.worklevel,
      p.worklevel
      

      编辑:不确定日期和工作级别是如何配置的,但我猜它们也需要CASE语句,以便从正确的派生表中提取它们(如果它们不在两者中)。

      是的,但我只知道如何获取库存计数。为此,您需要将每个已结束的案例标记为删除,并且仅在标记一小时后将其删除,或者您需要将已结束的案例写入另一个可以加入的表中。否则,您的案例表将不知道什么“不再存在”。如果我们能看到案例表中的columns.TY Cliff,这将很有帮助。”Inventory'是我每小时通过excel文件填充表格时对文件中案例id的计数,我可以很容易地找到doing count(案例id)作为库存。我按日期和工作级别分组。如果案例id在最近一次运行和前一次运行之间的一小时内关闭,则它将从文件中删除,并且不会出现在最近一次运行中。我的想法是以某种方式比较最新日期时间和之前日期时间的案例id,计算前一小时不在表上的新案例id的数量,并计算为新案例id。然后对“已关闭”执行相反的操作。计算在前一小时内表格中但在当前小时内不再存在的案例id的数量(始终是唯一的)。将该号码设为已关闭。在最近一次运行和上一次运行期间,表中有记录的任何案例id都将被算作库存。因此,是否不从此表中删除?如果是这样的话,那么您可以派生表,其中的子查询以时间戳为谓词。也就是说,
      从tblCase中选择*其中DATEDIFF(hour,casedate,GETDATE())=1
      (当然,这是用我的方言说的,也就是MS SQL Server)。使用不同的谓词创建和连接这些子查询中的一些,应该可以满足您的需要。让我知道你使用的是什么平台,我们可以得到更具体的信息。再次感谢。我把钱投到我的田里。我发现的一个问题是case_id的求和。他们在一个nvarchar领域。所以我把它们从求和改为计数。所有数据都是一个表,因此它们只需要从同一个表中提取。还有“on o.order\U no=p.order\U no”行。我不确定应该在这里输入哪个字段,但我假设它的case\u id。所以在进行这些更新之后,我运行了查询。以下是2个问题。日期工作级别库存新关闭2018年1月30日上午6:00摄入0 25 2018年1月30日上午7:00摄入7 7我知道粘贴不好,所以问题就在这里。对于当前小时,所有工作级别的“库存”显示为零,所有工作级别的新库存和已关闭库存的计数相同。即25和25用于案例设置1,28和28用于进气等。对于前一小时库存,新的和关闭的都是相同的计数。即7、7、7用于库存,新的和关闭的用于工作级别的摄入。那么预处理器是8,8,8,对。。。计数,而不是求和。这就是我在工作时回答问题所得到的。对不起!是的,是案例id,不是订单号。我开始在数据库中模拟这个,但过了一会儿就停止了。那个列名是遗留下来的。对此我也很抱歉。
      with
         opencases as (select * from tblCase
         where datediff(hour,casedate,getdate()) = 0),
         prevcases as (select * from tblCase where datediff(hour,casedate,getdate()) = 1)
      select
      case when o.currdate is not null then o.currdate else p.currdate end as 'Date / Time',
      case when o.worklevel is not null then o.worklevel else p.worklevel end as 'Work Level',
      count(o.case_id) as 'Inventory',
      sum(
         case
            when o.case_id is NOT NULL and p.case_id is NULL then 1 else 0
         end) as 'New',
      sum(
         case
            when o.case_id is NULL and p.case_id is NOT NULL then 1 else 0
         end) as 'Closed'
      from prevcases p
      full outer join opencases o
      on o.case_id = p.case_id
      group by
      o.currdate desc,
      p.currdate desc,
      o.worklevel,
      p.worklevel