более одной суммы из другой таблицы с другим состоянием - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть 2 таблицы .. одна называется "претензия"

+----------+----------+--------+------------+
| claim_id | store_id | amount | created_by |
+----------+----------+--------+------------+
|        2 |        2 | 926.00 |          2 |
|        3 |        2 | 746.50 |          5 |
|        4 |        2 | 989.26 |          5 |
|        5 |        2 | 766.00 |          6 |
|        6 |        2 | 403.00 |          6 |
|        7 |        2 | 130.00 |          6 |
+----------+----------+--------+------------+

другая "претензия_прогресс"

+----------+------+------+---------------------+
| claim_id | type | paid | created             |
+----------+------+------+---------------------+
|        2 | S    |    0 | 2019-09-12 20:37:26 |
|        3 | S    |    0 | 2019-09-12 21:52:32 |
|        4 | S    |    0 | 2019-09-12 22:33:16 |
|        5 | S    |    0 | 2019-09-12 22:53:58 |
|        6 | S    |    0 | 2019-09-12 22:58:55 |
|        7 | S    |    0 | 2019-09-12 23:01:40 |
|        5 | A    |    0 | 2019-09-21 04:02:58 |
|        6 | A    |    0 | 2019-09-21 04:03:02 |
|        5 | PP   |  150 | 2019-09-21 04:03:10 |
|        5 | PP   |   45 | 2019-09-21 04:03:22 |
+----------+------+------+---------------------+

уверен, что у них больше столбцов для каждой, но я упрощаюэто до такого.Claim_progress - это таблица для отслеживания статуса платежа таблицы заявок из типа S для отправки, затем A для утвержденного, затем PP в качестве промежуточного платежа и, наконец, P для платного.столбец «create_by» - это идентификатор пользователя в файле для заявки.

Что я пытаюсь сделать здесь, чтобы получить один лайнер, который выдает 2 столбца от общей суммы, а оставшаяся неоплаченная сумма претензии"создано".Таким образом, мне нужно получить последний прогресс по каждой претензии, идентифицируя ее как тип «А» или «ПП».

Общая утвержденная претензия от «create_by» 6 должна составить 1169, а общая сумма оплаченных будет 195Кстати, вот что я получил до сих пор, но мне интересно, если это избыточно или даже неправильно?

SELECT SUM(c.amount),cp3.paid FROM claim c
JOIN (SELECT claim_id,MAX(created) as maxprogress FROM claim_progress GROUP BY claim_id) cp ON (c.id=cp.claim_id)
JOIN claim_progress cp2 ON (cp.maxprogress=cp2.created)
JOIN (SELECT claim_id,SUM(paid) AS paid FROM claim_progress GROUP BY claim_id) cp3 ON (cp3.claim_id=cp.claim_id)
WHERE cp2.type IN ('A','PP') AND c.created_by='6'

Надеюсь, хозяева БД здесь могут пролить немного света.Спасибо.

РЕДАКТИРОВАТЬ:

Я ожидаю, что ответ будет таким

+----------------+------+
| total_approved | paid |
+----------------+------+
|           1169 |  195 |
+----------------+------+

1 Ответ

1 голос
/ 21 сентября 2019

Я чувствую, что должен быть в состоянии сжать это с помощью другого соединения, но я просто не могу понять это, и пришло время отключиться на неделю.Вы невероятно близки к оптимальным здесь.Это немного более упорядочено, но, по сути, вы делаете то же, что и вы:

select sum(c.amount) Total_approved, sum(Progress.paid) paid from claim c
join (select claim_id, sum(paid) paid, max(created) created from claim_progress where type = 'A' group by Claim_id, type) Approved on c.claim_id = approved.claim_id
Left join (select claim_id, sum(paid) paid, max(created) created from claim_progress where type = 'PP' group by Claim_id, type) Progress on c.claim_id = progress.claim_id
Where c.created_by = 6

Надеюсь, это поможет!

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