Интервал времени и выборка по дате - MySQL

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. SELECT
  2. S.NAME AS SERVICES,
  3. SUM(IF(P.DATE < '2017-01-01', ROUND(SUMMA, 2), 0)) AS DATE,
  4. SUM(IF(PAY_ID = 3, ROUND(SUMMA, 2), 0)) AS RECALCULATION,
  5. SUM(IF(SUMMA > 0, ROUND(SUMMA, 2), 0)) AS INCOMING,
  6. SUM(IF(SUMMA < 0, ROUND(SUMMA, 2), 0)) AS EXPENSE,
  7. SUM(ROUND(SUMMA, 2)) AS TOTAL
  8. FROM (SELECT
  9. C.ID,
  10. P.SUMMA,
  11. P.DATE,
  12. P.ACNT_ID,
  13. P.PAY_ID
  14. FROM payments P
  15. LEFT JOIN clients AS C ON (C.id = P.CLIENT_ID)
  16. ) AS P
  17. LEFT JOIN services S ON (P.ACNT_ID = S.id)
  18. LEFT JOIN payments_type AS T ON (PAY_ID = T.id)
  19. WHERE DATE BETWEEN '2017-01-01' AND '2017-12-31'
  20. GROUP BY ACNT_ID
test.rar База данных. Подскажите как реализовать баланс на начало периода.
Листинг программы
  1. SUM(IF(P.DATE < '2017-01-01', ROUND(SUMMA, 2), 0)) AS DATE,
Не работает из за
Листинг программы
  1. WHERE DATE BETWEEN '2017-01-01' AND '2017-12-31'

Решение задачи: «Интервал времени и выборка по дате»

textual
Листинг программы
  1. SELECT
  2.   S.NAME                                  AS SERVICES,
  3.   X.DATE                                  AS DATE,
  4.   SUM(IF(PAY_ID = 3, ROUND(SUMMA, 2), 0)) AS RECALCULATION,
  5.   SUM(IF(SUMMA > 0, ROUND(SUMMA, 2), 0))  AS INCOMING,
  6.   SUM(IF(SUMMA < 0, ROUND(SUMMA, 2), 0))  AS EXPENSE,
  7.   SUM(ROUND(SUMMA, 2))                    AS TOTAL
  8. FROM (SELECT
  9.         C.ID,
  10.         P.SUMMA,
  11.         P.DATE,
  12.         P.ACNT_ID,
  13.         P.PAY_ID
  14.       FROM payments P
  15.         LEFT JOIN clients AS C ON (C.id = P.CLIENT_ID)
  16.      ) AS P
  17.   LEFT JOIN services S ON (P.ACNT_ID = S.id)
  18.   LEFT JOIN payments_type AS T ON (PAY_ID = T.id)
  19.   LEFT JOIN (SELECT
  20.                S.NAME,
  21.                ROUND(SUMMA, 2) DATE
  22.              FROM (SELECT
  23.                      P.SUMMA,
  24.                      P.ACNT_ID,
  25.                      P.DATE
  26.                    FROM payments P
  27.                      LEFT JOIN clients AS C ON (C.id = P.CLIENT_ID)
  28.                   ) AS P
  29.                JOIN services S ON (P.ACNT_ID = S.id)
  30.              WHERE P.DATE < '2017-01-01'
  31.              GROUP BY S.NAME
  32.             ) AS X ON S.NAME = X.NAME
  33. WHERE P.DATE BETWEEN '2017-01-01' AND '2017-12-31'
  34. GROUP BY ACNT_ID

Объяснение кода листинга программы

  1. Код написан на SQL (Structured Query Language), который является языком запросов к реляционным базам данных.
  2. Задача заключается в выборке данных из нескольких таблиц базы данных с условием по дате.
  3. В первой части кода происходит объединение таблиц payments, clients, services и payments_type по соответствующим идентификаторам.
  4. Во второй части кода происходит подсчет суммы платежей для каждого вида услуг с учетом даты и идентификатора счета.
  5. Результаты подсчета записываются в отдельные переменные с названиями RECALCULATION, INCOMING, EXPENSE и TOTAL.
  6. В конце кода происходит группировка результатов по идентификатору счета и применение условия по дате с помощью оператора WHERE.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут