Интервал времени и выборка по дате - MySQL
Формулировка задачи:
SELECT S.NAME AS SERVICES, SUM(IF(P.DATE < '2017-01-01', ROUND(SUMMA, 2), 0)) AS DATE, SUM(IF(PAY_ID = 3, ROUND(SUMMA, 2), 0)) AS RECALCULATION, SUM(IF(SUMMA > 0, ROUND(SUMMA, 2), 0)) AS INCOMING, SUM(IF(SUMMA < 0, ROUND(SUMMA, 2), 0)) AS EXPENSE, SUM(ROUND(SUMMA, 2)) AS TOTAL FROM (SELECT C.ID, P.SUMMA, P.DATE, P.ACNT_ID, P.PAY_ID FROM payments P LEFT JOIN clients AS C ON (C.id = P.CLIENT_ID) ) AS P LEFT JOIN services S ON (P.ACNT_ID = S.id) LEFT JOIN payments_type AS T ON (PAY_ID = T.id) WHERE DATE BETWEEN '2017-01-01' AND '2017-12-31' GROUP BY ACNT_ID
SUM(IF(P.DATE < '2017-01-01', ROUND(SUMMA, 2), 0)) AS DATE,
WHERE DATE BETWEEN '2017-01-01' AND '2017-12-31'
Решение задачи: «Интервал времени и выборка по дате»
textual
Листинг программы
SELECT S.NAME AS SERVICES, X.DATE AS DATE, SUM(IF(PAY_ID = 3, ROUND(SUMMA, 2), 0)) AS RECALCULATION, SUM(IF(SUMMA > 0, ROUND(SUMMA, 2), 0)) AS INCOMING, SUM(IF(SUMMA < 0, ROUND(SUMMA, 2), 0)) AS EXPENSE, SUM(ROUND(SUMMA, 2)) AS TOTAL FROM (SELECT C.ID, P.SUMMA, P.DATE, P.ACNT_ID, P.PAY_ID FROM payments P LEFT JOIN clients AS C ON (C.id = P.CLIENT_ID) ) AS P LEFT JOIN services S ON (P.ACNT_ID = S.id) LEFT JOIN payments_type AS T ON (PAY_ID = T.id) LEFT JOIN (SELECT S.NAME, ROUND(SUMMA, 2) DATE FROM (SELECT P.SUMMA, P.ACNT_ID, P.DATE FROM payments P LEFT JOIN clients AS C ON (C.id = P.CLIENT_ID) ) AS P JOIN services S ON (P.ACNT_ID = S.id) WHERE P.DATE < '2017-01-01' GROUP BY S.NAME ) AS X ON S.NAME = X.NAME WHERE P.DATE BETWEEN '2017-01-01' AND '2017-12-31' GROUP BY ACNT_ID
Объяснение кода листинга программы
- Код написан на SQL (Structured Query Language), который является языком запросов к реляционным базам данных.
- Задача заключается в выборке данных из нескольких таблиц базы данных с условием по дате.
- В первой части кода происходит объединение таблиц
payments
,clients
,services
иpayments_type
по соответствующим идентификаторам. - Во второй части кода происходит подсчет суммы платежей для каждого вида услуг с учетом даты и идентификатора счета.
- Результаты подсчета записываются в отдельные переменные с названиями
RECALCULATION
,INCOMING
,EXPENSE
иTOTAL
. - В конце кода происходит группировка результатов по идентификатору счета и применение условия по дате с помощью оператора
WHERE
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д