雪花中两个日期之间的工作时间
Posted
技术标签:
【中文标题】雪花中两个日期之间的工作时间【英文标题】:Working hours between two dates in Snowflake 【发布时间】:2021-06-20 11:45:52 【问题描述】:如何在不创建表格的情况下计算? 我已经尝试过(datediff)和时间戳之类的功能,但我无法找到解决方案
我想得到这样的东西
+---------------------+---------------------+---------------+
| create_Task | Solved_Task | BusinessHours |
+---------------------+---------------------+---------------+
| 2012-03-05 09:00:00 | 2012-03-05 15:00:00 | 6.000000 |
| 2012-03-05 10:00:00 | 2012-03-06 10:00:00 | 8.000000 |
| 2012-03-05 11:00:00 | 2012-03-06 10:00:00 | 7.000000 |
| 2012-03-05 10:00:00 | 2012-03-06 15:00:00 | 13.000000 |
| 2012-03-09 16:00:00 | 2012-03-12 10:00:00 | 2.000000 |
| 2012-03-06 16:00:00 | 2012-03-15 10:00:00 | 50.000000 |
| 2012-03-09 16:00:00 | 2012-03-19 10:00:00 | 42.000000 |
+---------------------+---------------------+---------------+
我想指定工作时间,然后我可以计算工作时间
【问题讨论】:
您需要编写自己的函数来实现这一点,并结合您对什么构成“营业时间”、如何处理部分营业时间等的具体要求。 请分享样本输入和期望的结果 【参考方案1】:一种方法是创建工作时间表。然后你可以运行一个相当简单的查询:
select
t.id
, sum(datediff(‘second’,
-- calculate the max of the two start time
(case when t.start <=
w.working_day_start_timestamp
then w.working_day_start_timestamp
else t.start
end),
-- calculate the min of the two end times
(case when t.end >=
w.working_day_end_timestamp
then w.working_day_end_timestamp
else t.end
end)
)) / 3600 -- convert to hourly
as working_hour_diff
from
working_days_times w,
cross join time_intervals t
where -- select all intersecting intervals
(
t.start <= w.working_day_end_timestamp
and
t.end >= w.working_day_start_timestamp
)
and -- select only working days
w.is_working_day
group by
t.id
如果你需要一个函数,这篇文章描述了一个 javascript UDF 在 Snowflake 中的实现: https://medium.com/dandy-engineering-blog/how-to-calculate-the-number-of-working-hours-between-two-timestamps-in-sql-b5696de66e51
【讨论】:
以上是关于雪花中两个日期之间的工作时间的主要内容,如果未能解决你的问题,请参考以下文章