|
Дублирование с форматированием строк
|
|||
---|---|---|---|
#18+
Здравствуйте! бяда... (читайте внимательно, а то запутаетесь во времени :D) (ещё лучше нарисовать график) есть таблица с простоями [id][время начала простоя][время окончания простоя][и прочая ненужная ерунда] id | start_time | stop_time рабочая смена с 19:00 до 19:00 следующего дня (с вечера до вечера) предположим есть простой с [20.10.2020 18 :00:00] по [21.10.2020 20 :00:00] он захватывает 2 дня и 3 (!) рабочих смены (один час от смены с 19 на 20 число, всю смену с 20 на 21, один час с 21 на 22) необходимо вытащить этот простой и разбить его на три простоя (три одинаковые строки с одним id, но с разным временем) по рабочим сменам 1. с [20.10.2020 18:00:00] по [20.10.2020 19:00:00] 2. с [20.10.2020 19:00:00] по [21.10.2020 19:00:00] 3. с [21.10.2020 19:00:00] по [21.10.2020 20:00:00] Буду очень признателен за помощь! ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 09:55 |
|
Дублирование с форматированием строк
|
|||
---|---|---|---|
#18+
drunya2999, смены join простои ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 10:04 |
|
Дублирование с форматированием строк
|
|||
---|---|---|---|
#18+
drunya2999, 1) start/stop сместить влево на 19:00 2) размножить по днях 3) greatest/least начало/конец простоя в день 4) сместить вправо на 19:00 ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 10:08 |
|
Дублирование с форматированием строк
|
|||
---|---|---|---|
#18+
Stax, Это всё круто очень, но забыл сказать... этим запросом надо вытаскивать простои, которые могут длиться одну рабочую смену, могут длиться 2 и 3 и более мы заранее не знаем о иго длительности в рабочих сменах а в итоговой таблице должно получиться следующее: если простой был пару часов за одну рабочую смену, то в итоговой таблице он будет выглядеть как одна строка с датой и временем начала и окончания простой, продлившийся пару часов, который начался в конце одной смены, а закончился в начале следующей, должен выглядеть как две строки, у первой дата и время начала совпадают с временем начала простоя, а время окончания 19:00 того же дня. вторая строка соответственно начало в 19:00 этого дня, а окончание совпадает с окончанием простоя суть в том, что простой может быть несколько рабочих смен (от 19:00 до19:00) если простой 5 рабочих смен, то и строк должно быть соответствующее ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 10:59 |
|
Дублирование с форматированием строк
|
|||
---|---|---|---|
#18+
drunya2999 о иго ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 11:05 |
|
Дублирование с форматированием строк
|
|||
---|---|---|---|
#18+
-2-, не смущает то что я там вообще написал о И го? :D ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 11:07 |
|
Дублирование с форматированием строк
|
|||
---|---|---|---|
#18+
drunya2999, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
размножил строки осталось внимательно прописать (least/greatest) для start_ti/stop_ti ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 11:39 |
|
Дублирование с форматированием строк
|
|||
---|---|---|---|
#18+
Слегка не пойму, как такое возможно... дата окончания раньше даты начала на 1 секунду Stax Код: plsql 1. 2.
Код: plsql 1. 2. 3. 4.
Ладно, не суть... Вопрос тогда появился ещё один к вам Как же мне взять и в нужные ячейки записывать нужную дату и время 19:00:00? Каким образом это правильно организовать? Двойная благодарность за помощь ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 15:13 |
|
Дублирование с форматированием строк
|
|||
---|---|---|---|
#18+
drunya2999 Слегка не пойму, как такое возможно... дата окончания раньше даты начала на 1 секунду ето пример как размножить строки, врема начала конца надо досчитать нужно внимательно/аккуратно для строк прописать формулы start/stop а с внимательностью у меня напряг ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 15:28 |
|
Дублирование с форматированием строк
|
|||
---|---|---|---|
#18+
drunya2999 Как же мне взять и в нужные ячейки записывать нужную дату и время 19:00:00? не люблю такие задачки, нужно аккуратненько внимательно проверить на разных интервалах (особенно граничных) часто ето рутинная работа, причем иногда баг может жить достаточно долго, напр для простоя в 1-2 сек нюансики поправите, мож я что-то упустил Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2020, 16:02 |
|
Дублирование с форматированием строк
|
|||
---|---|---|---|
#18+
Stax, Хорошее решение, благодарю! Я пока ждал, решил более "неделикатным" способом Код: plsql 1. 2.
Надеюсь за такое мне руки не вырвут :D Вопрос ещё... а что если нужно делить не только в 19:00, но в нескольких точках, например в 7:00 и 19:00 сами точки устанавливаются пользователем (какие он захочет и их может быть больше 1) результат уже должен получиться с большим количеством строк: 1. начало простоя - одна из ближайших точек деления 2. предыдущая ближайшая точка деления - следующая точка ...................................................................................... N. предыдущая ближайшая точка деления - конец простоя ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2020, 08:42 |
|
Дублирование с форматированием строк
|
|||
---|---|---|---|
#18+
drunya2999 а что если нужно делить не только в 19:00 обычно так и есть (смен не одна) я б забил на чистоту sql и сделал ф-цию, пусть размножает ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2020, 09:46 |
|
Дублирование с форматированием строк
|
|||
---|---|---|---|
#18+
Stax, Это понятно. Но мне нужно это всё замутить в MatView ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2020, 11:28 |
|
|
start [/forum/topic.php?fid=52&fpage=50&tid=1881411]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
83ms |
get topic data: |
17ms |
get forum data: |
2ms |
get page messages: |
84ms |
get tp. blocked users: |
2ms |
others: | 380ms |
total: | 595ms |
0 / 0 |