【问题标题】:capture non occured data from dynamic input data从动态输入数据中捕获未发生的数据
【发布时间】:2017-03-26 16:51:45
【问题描述】:

我有如下给出的数据规则

1|Group1|Mandatory|1st occurrence
2|Group1|Optional|1st occurrence
3|Group1|Mandatory|1st occurrence
1|Group1|Mandatory|2nd occurrence
2|Group1|Optional|2nd occurrence
3|Group1|Mandatory|2nd occurrence
4|Group2|Mandatory|1st occurrence
5|Group2|Mandatory|1st occurrence
6|Group2|Optional|1st occurrence

在这里,您可以看到第 1 组在数据记录 1、2 和 3 中出现了两次。这意味着第 1 组可以出现最少 1 次和最多 2 次。并且还可以看到该特定记录在第 1 组下发生时的发生情况。必填项应始终出现,可选项在输入数据中可能出现也可能不出现。但一切都需要被捕获..缺少什么

这是我的输入列数据。这是输入数据中唯一的一列

1
2
3
1
2
4
5

如果根据输入数据中的数据规则表丢失,我有什么方法可以获得结果来识别哪个数据集?就像在这个例子中一样,输出应该像第二次出现的第 1 组中缺少强制记录 (3)。唯一可用的信息来自输入数据和数据规则表。

如果需要添加任何东西以获得理想的结果...我想听听...它是什么。欢迎所有建议。

谢谢

【问题讨论】:

  • 您真正使用的是哪个 DBMS?
  • @GurV..它的 oracle 11g

标签: sql oracle oracle11g


【解决方案1】:

我认为你需要这样的东西:

with input as (select column_value id, 
                      count(1) over (partition by column_value order by null
                      rows between unbounded preceding and current row) cnt
                 from table(sys.odcinumberlist(1, 2, 3, 1, 2, 4, 5)))
select * 
  from data 
  where status = 'Mandatory' 
    and (id, occurence) not in (select id, cnt from input)

demo

  ID GRP        STATUS     OCCURENCE
---- ---------- ---------- ---------
   3 Group1     Mandatory          2

计算id 在输入数据中出现的次数,并将结果与​​数据中强制出现的次数进行比较。


编辑:解释

select column_value id, 
       count(1) over (partition by column_value order by null
       rows between unbounded preceding and current row) cnt
  from table(sys.odcinumberlist(1, 2, 3, 1, 2, 4, 5))

这部分模拟您输入的数据。 table(sys.odcinumberlist(1, 2, 3, 1, 2, 4, 5)) 只是模拟输入,可能这些ids 在某个表中,从那里选择它们。对于每个提供的id,我正在计算在分析版本中使用函数count() 的出现次数越来越多,所以我们有这个:

id    cnt
---   ---
  1     1
  1     2
  2     1
  2     2
  3     1
  4     1
  5     1

接下来,这些对将与数据中的强制对 (id, occurence) 进行比较。如果最后一个select 缺少某些内容,则显示此行并带有子句not in

这就是我理解你的问题的方式,也许你需要一些修改,但现在你有一些提示。希望这会有所帮助(也很抱歉我的英语不好;-))。

【讨论】:

  • ...感谢您的逻辑。如果您可以在我的要求中使用此逻辑提供一些详细信息,那就太好了。我的意思是它是如何工作的?
  • 谢谢思考...!!你很棒 ..! ?
  • ..如果我只想比较数据组怎么办?就像您在输入数据中看到前五条记录一样,它们仅属于第 1 组。但是让我们说 1 或 2 或 3 来自任何其他组,他们将被计入同一组。我希望他们只与各自的组进行比较......有什么建议吗?
  • 恐怕我不太明白。我建议你问关于 SO 的另一个新问题,请给我们清晰的输入数据示例,描述逻辑和预期输出。如果你的问题清晰易懂,我想你会很快得到答案。
  • Stibons..请检查此stackoverflow.com/questions/43123963/… 新问题以获取更多详细信息..!!谢谢
猜你喜欢
  • 2018-06-27
  • 2018-07-11
  • 2011-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 2017-09-06
相关资源
最近更新 更多