Как найти номер недели, период и год с даты в Redshift? (Неделя начинается со среды и заканчивается во вторник) - PullRequest
0 голосов
/ 03 июля 2019

Необходимо найти weekNumber, как 1,2,3,4, но неделя начинается со среды и заканчивается вторником из столбца даты, а после 4-й недели снова перезапускается снова, как 1-я неделя и т. Д. (Не нужно учитывать месяц).

Необходимо найти Period, основанный только на weekNumber, 4 недели как 1 Период и Периоды, заканчивающиеся на 13 (период 1-13), перезапустятся снова 1-й период. (4 недели = 1 период) (не нужно учитывать месяц).

Теперь нужно вычислить businessyear на основе Period. 13 периодов как один businessyear. (13 периодов = 1 год)

Логика расчета:

  • 7 дней * 4 недели = 28 дней = 1 период
  • 13 периодов = 1 год
* * Пример тысяча двадцать-один: * * 1 022
  • В году обычно 365 дней
  • В моем сценарии 4 недели * 7 дней = 28 дней
  • 28 дней * 13 периодов = 364 дня
  • Остальные дни станут пятой неделей и периодом 14.
Datekey   date        Year  semistor  Quarter  Month       DayName     DayNum  Wnumber
20090101  01-01-2009  2009  1         1        January  1   Thursday   1       0
20090102  02-01-2009  2009  1         1        January  1   Friday     2       0
20090103  03-01-2009  2009  1         1        January  1   Saturday   3       0
20090104  04-01-2009  2009  1         1        January  1   Sunday     0     
20090105  05-01-2009  2009  1         1        January  1   Monday     0     
20090106  06-01-2009  2009  1         1        January  1   Tuesday    6       0
20090107  07-01-2009  2009  1         1        January  1   Wednesday  0       0
20090108  08-01-2009  2009  1         1        January  1   Thursday   1       1
20090109  09-01-2009  2009  1         1        January  1   Friday     2       1
20090110  10-01-2009  2009  1         1        January  1   Saturday   3       1
20090111  11-01-2009  2009  1         1        January  1   Sunday     4       1
20090112  12-01-2009  2009  1         1        January  1   Monday     5       1
20090113  13-01-2009  2009  1         1        January  1   Tuesday    6       1
20090114  14-01-2009  2009  1         1        January  1   Wednesday  0       1

Нет необходимости учитывать месяц в моем сценарии, нужно также учитывать високосный год (2016, 2020).

1 Ответ

0 голосов
/ 04 июля 2019

Традиционный способ сделать этот тип вещи - создать таблицу календаря в базе данных.Затем ваши запросы могут просто JOIN к таблице календаря извлечь соответствующее значение.

Я считаю, что самый простой способ создать таблицу calendar - это использовать Excel .Просто напишите некоторые формулы, которые предоставляют желаемые значения, и скопируйте их на следующее десятилетие или около того.Затем сохраните лист в формате CSV и загрузите его в базу данных.

Таким образом, вы можете полностью избежать сложных вычислений с использованием функций базы данных и использовать любые правила, какие пожелаете.

...