Интервал времени и выборка по дате - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д