Номер дня в шаблоне - PullRequest
       12

Номер дня в шаблоне

0 голосов
/ 20 ноября 2018

У меня есть некоторые данные, которые показывают данные о смене диапазона для моих работников.Я пытаюсь найти способ, если он есть, установить первый день startdaynum промежутка как 1, а затем соответствующим образом обозначить любой исходящий enddaynum или startdaynum после этого равным 2, если дата / время началаили дата / время окончания - 1 день после начала, или 3, если даты - 2 дня после начала, и т. д. и т. д.

Ниже у меня есть некоторые примерные данные, все это реальные данные, кромедля столбцов startdaynum и enddaynum, которые я заполнил вручную, чтобы показать, чего я пытаюсь достичь.Последний столбец shiftsegmentid уникален для каждой строки.От второго до последнего столбца shiftcodeid уникален для каждой смены.Таким образом, это было бы то, где мы могли бы определить, является ли строка, которую мы оцениваем, продолжением предыдущей строки или первой строки сдвига, если это можно сделать с помощью чего-то аналитически.

Первые 2 строкивсе 1 смены, где все даты окончания начала одинаковы.Вторые 2 строки - это 1 сдвиг вместе, где первая дата окончания - это день после первой даты начала, поэтому я хочу startdaynum=1 но enddate=2.Строка 2 - это день после первой даты начала этой смены, поэтому они должны быть startdaynum=2 и enddate=2, как показано.

NAME    DESCRIPTION TYPE     STARTDAYNUM STARTTIME           ENDDAYNUM ENDTIME             SHECDHOURS SKILLSANDCERTS TRANSFER     SHIFTCODEID SHIFTSEGMENTID
------- ----------- -------- ----------- ------------------- --------- ------------------- ---------- -------------- ------------ ----------- --------------
1009ABC Pattern 1   Transfer           1 01/01/1900 05:00 am         1 01/01/1900 01:30 pm        8.5                ///800505///        3050           4052
1009ABC Pattern 1   Transfer           1 01/01/1900 01:30 pm         1 01/01/1900 02:30 pm          1                ///800855///        3050           4053
1009XYZ Pattern 2   Transfer           1 01/01/1900 05:00 pm         2 01/02/1900 01:30 am        8.5                ///800505///        3070           4072
1009XYZ Pattern 2   Transfer           2 01/02/1900 01:30 am         2 01/02/1900 02:30 am          1                ///800855///        3070           4073

1 Ответ

0 голосов
/ 20 ноября 2018

Исходя из ваших примеров данных и комментариев, столбцы времени начала и окончания уже содержат информацию, которую вы ищете в части номинальной даты, поэтому вам не нужно делать ничего сложного, чтобы найти соседние записи и т. Д.

Вы можете просто использовать:

extract(day from starttime) as startdaynum

и

extract(day from endtime) as enddaynum

Демо:

with your_table (name, description, type, starttime, endtime, shecdhours, skillsandcerts, transfer, shiftcodeid, shiftsegmentid) as (
  select '1009ABC', 'Pattern 1', 'Transfer', to_date('01/01/1900 05:00 am', 'MM/DD/YYYY HH:MI am'), to_date('01/01/1900 01:30 pm', 'MM/DD/YYYY HH:MI am'), 8.5, null, '///800505///', 3050, 4052 from dual
  union all
  select '1009ABC', 'Pattern 1', 'Transfer', to_date('01/01/1900 01:30 pm', 'MM/DD/YYYY HH:MI am'), to_date('01/01/1900 02:30 pm', 'MM/DD/YYYY HH:MI am'), 1, null, '///800855///', 3050, 4053 from dual
  union all
  select '1009XYZ', 'Pattern 2', 'Transfer', to_date('01/01/1900 05:00 pm', 'MM/DD/YYYY HH:MI am'), to_date('01/02/1900 01:30 am', 'MM/DD/YYYY HH:MI am'), 8.5, null, '///800505///', 3070, 4072 from dual
  union all
  select '1009XYZ', 'Pattern 2', 'Transfer', to_date('01/02/1900 01:30 am', 'MM/DD/YYYY HH:MI am'), to_date('01/02/1900 02:30 am', 'MM/DD/YYYY HH:MI am'), 1, null, '///800855///', 3070, 4073 from dual
)
select name,
  description,
  extract(day from starttime) as startdaynum,
  to_char(starttime, 'HH:MI am') as starttime,
  extract(day from endtime) as enddaynum,
  to_char(endtime, 'HH:MI am') as endtime,
  shecdhours,
  skillsandcerts,
  transfer,
  shiftcodeid,
  shiftsegmentid
from your_table;

NAME    DESCRIPTI STARTDAYNUM STARTTIM  ENDDAYNUM ENDTIME  SHECDHOURS SKILLSANDCERTS TRANSFER     SHIFTCODEID SHIFTSEGMENTID
------- --------- ----------- -------- ---------- -------- ---------- -------------- ------------ ----------- --------------
1009ABC Pattern 1           1 05:00 AM          1 01:30 PM        8.5                ///800505///        3050           4052
1009ABC Pattern 1           1 01:30 PM          1 02:30 PM          1                ///800855///        3050           4053
1009XYZ Pattern 2           1 05:00 PM          2 01:30 AM        8.5                ///800505///        3070           4072
1009XYZ Pattern 2           2 01:30 AM          2 02:30 AM          1                ///800855///        3070           4073
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...