Итоги финансового квартала SQL ... У меня уже есть календарные - PullRequest
0 голосов
/ 23 августа 2011

Вот SQL-запрос, который я имею для квартальных итогов календарного года

SELECT  
SUM(CASE WHEN WEEK(LAST_DAY) <= 13 THEN BILLABLE END) AS Q1 
,SUM(CASE WHEN WEEK(LAST_DAY) >= 14 AND WEEK(LAST_DAY) <= 26 THEN BILLABLE END) AS Q2 
,SUM(CASE WHEN WEEK(LAST_DAY) >= 27 AND WEEK(LAST_DAY) <= 39 THEN BILLABLE END) AS Q3
,SUM(CASE WHEN WEEK(LAST_DAY) >= 40 AND WEEK(LAST_DAY) <= 53 THEN BILLABLE END) AS Q4,
Emp_Name
FROM 'emp_info' 
WHERE YEAR(LAST_DAY) = YEAR(CURRENT_TIMESTAMP)
GROUP BY Emp_Name

Мне нужно сдвинуть его, чтобы он дал мне итоги финансового года (с 1 июля по 30 июня).

Я знаю, что при этом номера недели должны начинаться 1 июля, а не 1 января, и, вероятно, где-то там будет указание случая.Но я не могу заставить его выйти правильно.

Ответы [ 4 ]

1 голос
/ 23 августа 2011

Попробуйте этот запрос -

SELECT
  Emp_Name,
  IF(DATE(LAST_DAY) <= DATE('2011-6-30'), YEAR(LAST_DAY) - 1, YEAR(LAST_DAY)) f_year,
  QUARTER(LAST_DAY) quarter,
  SUM(BILLABLE)
FROM
  emp_info
GROUP BY
  Emp_Name,
  f_year,
  quarter;
1 голос
/ 23 августа 2011

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

0 голосов
/ 23 августа 2011

Ваша настоящая проблема заключается в том, что, вообще говоря, функции даты и времени будут работать только с объектами даты / времени календаря ISO / (Другие распространенные), но они вам нужны для работы с финансовым календарем, специфичным для компании.

Именно поэтому Файлы календаря используются в качестве перевода между фискальными и ISO календарями. Создайте файл календаря на несколько лет в любом направлении, затем вы можете присоединиться к нему, ограничив / группировав по финансовому году и периоду. Никаких заявлений по делу не требуется.

Я также рекомендую хранить большинство дат в ваших таблицах как фактические даты ISO, а затем переводить / использовать фискальные даты только тогда, когда это действительно необходимо - у нас есть несколько таблиц суммирования, которые не связаны с финансовым годом / периодом, но которые отображают данные о покупательском поведении клиентам (которые не знают / не заботятся, когда наступает наш финансовый год) ...

0 голосов
/ 23 августа 2011

Вы знаете, что ваш запрос не делит год на 4 квартала по месяцам? Вместо использования функции WEEK() используйте MONTH().

При работе с месяцами и годами (YEAR()) вычисление суммы за финансовый год будет простым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...