查找多个日期之间的时间间隔 - Kettle
Find time gaps between multiple dates - 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 transformation/job 或 MySQL 查询,但我似乎无法做到这一点。任何 ideas/suggestions?
编辑:
现在我正在尝试这样的事情(简化):
SELECT t.id, t.start,t.end, max(t2.end)
FROM t, t t2
WHERE t2.start <= t.start
GROUP BY t.pk
但现在的问题是,对于 Max,我每次 PK 只能返回一行。我需要 'running max'。这背后的想法是为每个 PK 组获取到目前为止的最大结束日期,并将其与开始日期进行比较(如果结果 >= 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 .......................
同样,知道如何让它正常运行吗?
谢谢
我建议你使用 having for the max .. min delta e the sum (total) of the parts ..
进行检查
select pk, max(end) - min(start) as delta , sum(start - end) as tot
from my_table
goup by pk
having delta - tot > 0
最终你也可以管理一点宽容..
我需要找到多个开始结束日期行之间的间隔(每个 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 transformation/job 或 MySQL 查询,但我似乎无法做到这一点。任何 ideas/suggestions?
编辑: 现在我正在尝试这样的事情(简化):
SELECT t.id, t.start,t.end, max(t2.end)
FROM t, t t2
WHERE t2.start <= t.start
GROUP BY t.pk
但现在的问题是,对于 Max,我每次 PK 只能返回一行。我需要 'running max'。这背后的想法是为每个 PK 组获取到目前为止的最大结束日期,并将其与开始日期进行比较(如果结果 >= 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 .......................
同样,知道如何让它正常运行吗? 谢谢
我建议你使用 having for the max .. min delta e the sum (total) of the parts ..
进行检查 select pk, max(end) - min(start) as delta , sum(start - end) as tot
from my_table
goup by pk
having delta - tot > 0
最终你也可以管理一点宽容..