找出多个日期之间的时间差距 - 水壶

时间:2016-04-29 13:09:41

标签: mysql date pentaho kettle

我需要找到多个开始日期行之间的差距(每个PK最多可以有4行)。我有一个组合PK的输入 - 开始日期 - 结束日期,我需要以某种方式检查这些日期之间是否有任何差距。例如:

PK          Start                    End
1        2016-01-01 00:00      2016-01-01 11:00
1        2016-01-01 10:00      2016-01-01 21:00
1        2016-01-01 13:00      2016-01-01 16:00
1        2016-01-01 18:00      2016-01-01 21:00
2        2016-01-01 11:00      2016-01-01 12:00
2 .......................

我尝试使用Kettle中的分析步骤来获取前一行的结束日期,然后将其与当前行的开始日期进行比较,但这不会成功,因为时间可以是重叠,或者在示例中如果我比较第3行和第4行它将报告错误,即使第2行覆盖的时间很难。所以我需要一个解决方案来比较具有相同PK的所有行,并检查是否他们之间有时间差距。我试图创建一些Kettle转换/作业或MySQL查询,但我似乎无法做到这一点。有什么想法/建议吗?

编辑: 现在我尝试这样的事情(简化):

SELECT t.id, t.start,t.end, max(t2.end)
FROM t, t  t2
WHERE t2.start <= t.start
GROUP BY t.pk

但现在的问题是我每次PK只得到一行,而Max。我需要运行max&#39;。这背后的想法是为每个PK组获取Max结束日期,并将其与开始日期进行比较(如果结果是&gt; = 0,则没有间隙)。所以以前的例子是:

PK          Start                    End                 MAX
1        2016-01-01 00:00      2016-01-01 11:00      2016-01-01 11:00
1        2016-01-01 10:00      2016-01-01 21:00      2016-01-01 21:00
1        2016-01-01 13:00      2016-01-01 16:00      2016-01-01 21:00
1        2016-01-01 18:00      2016-01-01 21:00      2016-01-01 21:00
2        2016-01-01 11:00      2016-01-01 12:00      2016-01-01 12:00
2 .......................

再次,任何想法如何让它正常运作? 感谢。

1 个答案:

答案 0 :(得分:0)

我建议您使用最大.. min delta e检查各部分的总和(总数)。

 select pk, max(end) - min(start) as delta , sum(start - end) as tot
 from my_table
 goup by pk
 having delta - tot > 0

最终你可以管理一点宽容......