我有一个表,其中包含开始时间(在示例中使用数字以使其保持简单)以及事件的持续时间。
我想确定“块”及其开始时间和结束时间。
每当前一行的结束时间(开始时间+持续时间)(按开始时间排序)与当前行的开始时间之间的差值为时,>=5
应开始一个新的“块”。
这是我的测试数据,包括在注释中尝试进行图形解释的尝试:
WITH test_data AS (
SELECT 0 s, 2 dur FROM dual UNION ALL --# 鈻犫枲
SELECT 2 , 2 FROM dual UNION ALL --# 鈻犫枲
SELECT 10 , 1 FROM dual UNION ALL --# 鈻�
SELECT 13 , 4 FROM dual UNION ALL --# 鈻犫枲鈻犫枲
SELECT 15 , 4 FROM dual --# 鈻犫枲鈻犫枲
)
--# Should return
--# 0 .. 4 --# 鈻犫枲鈻犫枲
--# 10 .. 19 --# 鈻犫枲鈻犫枲鈻犫枲鈻犫枲鈻�
第一个块开始于0
,结束于4
。由于与下一行的区别是>=5
,开始另一个块10
,终止于19
。
我可以使用来识别块的第一行LAG
,但是我还没有找到如何继续的方法。
我可以在PL / SQL循环中解决问题,但是出于性能原因,我试图避免这种情况。
关于如何编写此查询的任何建议?
预先感谢,彼得
我将子查询与分析结合使用,以识别和分组连续范围:
SQL> WITH test_data AS (
2 SELECT 0 s, 2 dur FROM dual UNION ALL --# 鈻犫枲
3 SELECT 2 , 2 FROM dual UNION ALL --# 鈻犫枲
4 SELECT 10 , 1 FROM dual UNION ALL --# 鈻�
5 SELECT 13 , 4 FROM dual UNION ALL --# 鈻犫枲鈻犫枲
6 SELECT 15 , 4 FROM dual --# 鈻犫枲鈻犫枲
7 )
8 SELECT MIN(s) "begin", MAX(s + dur) "end"
9 FROM (SELECT s, dur, SUM(gap) over(ORDER BY s) my_group
10 FROM (SELECT s, dur,
11 CASE
12 WHEN lag(s + dur) over(ORDER BY s) >= s - 5 THEN
13 0
14 ELSE
15 1
16 END gap
17 FROM test_data
18 ORDER BY s))
19 GROUP BY my_group;
begin end
---------- ----------
0 4
10 19
我有一个遗传数据集,我想对基因组中物理上接近的遗传变异/行进行分组。我想对每个染色体()基因组中某些斑点范围内的基因进行分组。 我的“spots”数据集包含变量/行需要在一定范围内的位置,如下所示: 我的< code>low和< code>high列是我希望查看下一个数据集中是否有任何行落入其中的范围,同时考虑到染色体(< code>chrom)也必须匹配。具有唯一范围和chrom组合的每一行都是
有一个矩阵a,比如: 我只想得到每行没有3个或更多数字的行,它们之间都有最大差异 此函数应仅返回第1行。
编辑:从我的角度来看,这太含蓄了,但这个想法当然是一个可能的解决方案,它将是最快的(比调用两次流生成器更快,并且至少要分别执行两个操作): ...利用一次迭代,而不必在内存上加载整个集合。我在做答案并行化的测试
我的数据集示例如下: 我对这个数据集有两个问题: < li >我需要计算日期之间的差异,但此差异将基于“买方”和“id”分组来计算,这意味着,买方“Jenny”和Id“9”的日期差异将是一个组,Id为“4”的买方“Chang”将是另一个组,Id为“5”的买方“Chunfei”将是另一个组,Id为“8”的“Chunfei”将是另一个组。因此,输出将是: 问题是我不明白为什么group_by不起作用。
在任何情况下(反之亦然),是否有任何理由选择并行的。对于每个而不是等待ForEachAsync?或者它们实际上是相同的? VS公司
本文向大家介绍成本差异和进度差异之间的差异,包括了成本差异和进度差异之间的差异的使用技巧和注意事项,需要的朋友参考一下 对于任何应用程序或专门用于任何项目,最关注的因素之一是在开发前和开发后阶段的预算管理和时间管理。因此,要评估任何项目的这两个主要因素,有很多方法,其中成本差异和进度差异是两个重要且主要的方法。 顾名思义,“成本差异”基于项目开发中花费的成本,而“进度差异”则基于相同开发中花费的时