Несколько Ежемесячные отчеты в рамках ежемесячного платежного цикла

голоса
-2

Каждый отдел должен иметь только один заявление за ежемесячный платежный цикл.


Моя цель состоит в том, чтобы выяснить, сколько отделов пострадали более одной выписки в течение того же цикла выставления счетов.

  КОНТЕКСТ: 

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

Департамент таблица имеет отношение один-ко-многим с Statement столом (отдел, как ожидается, одно заявление в конце каждого платежного цикла)

Каждый оператор счетов имеет свой собственный closed_date

a.payment_period = 1 представляет собой отделы, которые выставляются ежемесячно

Я также попытался найти между конкретным истекают даты для каждого аккаунта.


 Проблема с моим запросом является то, что он выводит общее количество счетов closed_dates, вместо проверки только для нескольких появлений в пределах расчетного цикла.  


Как этот запрос будет изменен только выходными отделы с более чем одним экземпляром ежемесячного счета, встречающимся в пределах расчетного цикла каждого отдела?  

QUERY:

    SELECT s.department, s.statement, COUNT(s.closed_date) AS sd, from_unixtime(s.closed_date)
    FROM statement s
    INNER JOIN department d
    ON s.department=d.department
    WHERE from_unixtime(s.closed_date) BETWEEN 
    DATE_SUB(from_unixtime(d.exp_date), INTERVAL 1 MONTH) AND 
    from_unixtime(d.exp_date)  
    AND d.period=1
    GROUP BY s.statement DESC
    HAVING sd>1

Пример вывода:

department  statement        sd     closed_date
1719712        9351464        3     2018-09-24 
1719709        9351463        2     2018-09-24 
1719708        9351462        2     2018-09-24 
1719665        9351457        3     2018-09-24 
Задан 07/11/2018 в 20:06
источник пользователем
На других языках...                            


1 ответов

голоса
0

Похоже, что вы пытаетесь группы по месяцам.

В MySQL это работа для в LAST_DAY()функции. Узор вам нужно для этого есть:

 SELECT a, b, LAST_DAY(datestamp) month_ending, SUM(c) c, MAX(d) maxd
   FROM table
  GROUP BY a, b, LAST_DAY(datestamp)

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

Я должен догадаться , потому что я не понимаю смысла exp_date. Это должно делать то , что вы хотите.

      SELECT s.department, LAST_DAY(FROM_UNIXTIME(s.closed_date)) month_ending,
             COUNT (*) statement_count
        FROM statement s
        JOIN department d ON s.department = d.department
       WHERE d.period = 1
         AND s.closed_date >=  (FROM_UNIXTIME(d.exp)) - INTERVAL 1 MONTH
         AND s.closed_date <   (FROM_UNIXTIME(d.exp)) 
       GROUP BY s.department, LAST_DAY(FROM_UNIXTIME(s.closed_date))
       HAVING COUNT(*) > 1

Это дает результирующий набор с одной строкой в ​​отдел в месяц, отфильтрованные так это только показывает отделы с несколькими счетами-фактурами.

Ответил 07/11/2018 в 22:04
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more