Вообще этот сериал не про аварию. Хотя ей уделено очень много времени. Сериал про людей. Я бы сказал даже про причины развала СССР. Система, которая основной парадигмой выбрала ложь и своим и чужим, всегда идет к катастрофе с тысячами невинных жизней. Система уже к тому моменту разложилась настолько, что инженеры и руководство станции думали о своих шкурных интересах больше, чем о безопасности. Чиновники в руководстве думали больше о своих креслах, чем об страдающих от радиации людях. Простые люди оказались не нужны уже той системе, а взаимно такая система оказалась не нужна простым людям. В чем и был ее конец
with periods(id,
start_time,
stop_time) as (
values(1,
'2019-03-29 07:00:00'::timestamp,
'2019-04-08 14:00:00'::timestamp),
(2,
'2019-04-10 07:00:00'::timestamp,
'2019-04-10 20:00:00'::timestamp),
(3,
'2019-04-11 12:00:00'::timestamp,
'2019-04-12 16:07:12'::timestamp),
(4,
'2018-12-28 12:00:00'::timestamp,
'2019-01-16 16:00:00'::timestamp) ) ,
calc_table as (
select
id,
date_part('day', date_trunc('day',stop_time) - date_trunc('day',start_time))::int as date_diff,
date_trunc('day',start_time)+ interval '10 hour' as start_work_time,
date_trunc('day',stop_time)+ interval '19 hour' as end_work_time
from
periods
) -- промежуточная таблица вычислений
select
p.*,
trunc(c.date_diff/7)*5*9 -- количество полных недель в рабочих часах
+
c.date_diff%7*9 -- дробная часть в рабочих часах
-
case
when trunc(c.date_diff/7) > 0 and c.date_diff%7 > 0
then
(extract(isodow from start_time) - c.date_diff%7)*9
else
0
end -- корректировка дробной части на выходные дни
+
(9 -
case
when c.end_work_time > stop_time
then date_part('hour', c.end_work_time - stop_time)
else 0
end
-
case
when start_time > c.start_work_time
then date_part('hour', start_time - c.start_work_time)
else 0
end) -- корректировка рабочих часов начала и конца интервала
-
case
when p.id = 4
then 9 * 9
else 0
end -- количество праздничных дней в 4м интервале
+
case
when p.id = 4
then 1 * 9
else 0
end -- 1 дополнительный рабочий день в 4м интервале
as work_hrs
from
periods as p
inner join calc_table as c
on p.id = c.id
+ конечно забыл про неполные недели для интервалов. Полагаю нужно вычислить день недели начала и конца интервалов, исключить эти дни и посчитать по 5 дневке
Вообще по логике в каждом интервале отсекается день начала и день окончания. Считается количество рабочих дней в каждом интервале (для каждой недели 5 дней * на количество недель + доп рабочие дни — праздники) и умножается на 8. Потом прибавляются рабочие часы начала интервала (19-00 минус время начала) и конца интервала (10-00 плюс время окончания). То есть по сути задача сводится, на мой взгляд, к расчету количества рабочих недель
Это все идет от поверхностности. Чтобы разобраться в технологии и понять как правильно и можно ли использовать ее в проекте — нужны значительные временные затраты. А на аутстафе/аутсорсе нет на это времени. Им нужно здесь и сейчас и продать себя подороже, выкрикивая побольше заклинаний «микросервис», «кафка» или так делал амазон, гугл, фейсбук
Автор пишет буковки для компилятора, называя это «кодом». И не понимает зачем это нужно. Лично я понимаю людей, которые работают ради заработка или чтобы помочь другим людям. Но не понимаю тех, кто пишет буковки для компилятора и считает это смыслом
Как бы не секрет, что успех многих корпораций — полурабский труд своих сотрудников. Видимо массовых сокращений и 60 часовой рабочей недели недостаточно чтобы вытянуть «суперуспешную» корпорацию
Склонен верить, что это была небольшая комета. И комета сгорела в атмосфере, выделив огромное количество энергии и водяного пара. То, что кометы падают на планеты, уже наблюдалось в случае падения на Юпитер кометы Шумейкера Леви
В общем и целом статью можно резюмировать — используйте инструменты для решения конкретной задачи, а не «правильные» (true) инструменты. К сожалению, есть такая проблема, и она носит не технический, а социальный характер
Вообще расчет количества недель довольно быстро гуглится
www.sqlines.com/postgresql/how-to/datediff
+ конечно забыл про неполные недели для интервалов. Полагаю нужно вычислить день недели начала и конца интервалов, исключить эти дни и посчитать по 5 дневке
riafan.ru/1179725-spacex-podala-v-sud-na-pravitelstvo-ssha