Форум OlegON > Программы и оборудование для автоматизации торговли > Кассовые программы > УКМ-4

Запрос, выводящий топ карт с максимальными суммами покупок за определенный период : УКМ-4

20.04.2024 7:51


20.11.2013 11:24
Dim
 
нужен запрос, выводящий топ, ну например 10, карт с максимальными суммами покупок за определенный период.
20.11.2013 14:45
vdm
 
Карты есть разные, клиентские и дисконтные.
20.11.2013 15:25
vdm
 
v49.

Возвраты вычитаются, карты отбираются только активные (без учета блокировки самого клиента).

Цитата:
SELECT cr.start_card_code card,
sum(if(h.TYPE IN (1, 4, 9, 10), -d.amount, d.amount)) cardsum
FROM
trm_out_receipt_header h
INNER JOIN trm_out_receipt_subtotal d
ON h.cash_id = d.cash_id AND h.id = d.id
INNER JOIN trm_out_receipt_footer f
ON f.cash_id = d.cash_id AND f.id = d.id
INNER JOIN trm_in_cards cr
ON cr.global_id = 0 AND cr.id = h.card
WHERE
cr.deleted = 0 AND cr.active = 1
AND f.RESULT = 0
AND h.TYPE IN (0, 5, 1, 4, 8, 9, 10)
AND f.DATE BETWEEN '2013-10-01 00:00:00' AND '2013-10-01 23:59:59'
GROUP BY card
ORDER BY cardsum DESC
LIMIT 10;
20.11.2013 16:24
Dim
 
все работает, спасибо огромное. дальше сам доделаю
21.11.2013 11:52
Dim
 
добавил вывод фамилии и имени и добавил условие на отбор активных клиентов... считает ооооочень долго... можно соптимизировать как-нито?

Цитата:
SELECT cr.start_card_code card, cl.sur_name, cl.name,
sum(if(h.TYPE IN (1, 4, 9, 10), -d.amount, d.amount)) cardsum
FROM
trm_out_receipt_header h
INNER JOIN trm_out_receipt_subtotal d
ON h.cash_id = d.cash_id AND h.id = d.id
INNER JOIN trm_out_receipt_footer f
ON f.cash_id = d.cash_id AND f.id = d.id
INNER JOIN trm_in_cards cr
ON cr.global_id = 0 AND cr.id = h.card
INNER JOIN trm_in_card_client ccl
ON ccl.card=cr.id
INNER JOIN trm_in_clients cl
ON cl.id=ccl.client
WHERE
cr.deleted = 0 AND cr.active = 1
AND cl.active=1 AND cl.deleted=0
AND f.RESULT = 0
AND h.TYPE IN (0, 5, 1, 4, 8, 9, 10)
AND f.DATE BETWEEN '2013-10-01 00:00:00' AND '2013-10-31 23:59:59'
GROUP BY card
ORDER BY cardsum DESC
LIMIT 10;
21.11.2013 12:42
vdm
 
Код:
INNER JOIN trm_in_card_client ccl
ON ccl.global_id = cr.global_id and ccl.card = cr.id
INNER JOIN trm_in_clients cl
ON cl.global_id = ccl.global_id AND cl.id = ccl.client
21.11.2013 12:51
Dim
 
у меня global_id везде 0 ((

mysql> select distinct global_id from trm_in_card_client;
+-----------+
| global_id |
+-----------+
| 0 |
+-----------+
1 row in set (0.00 sec)

mysql> select distinct global_id from trm_in_clients;
+-----------+
| global_id |
+-----------+
| 0 |
+-----------+
1 row in set (0.01 sec)
21.11.2013 12:55
vdm
 
Так и должно быть.
Не знаю, для чего это поле, но оно входит в индекс и без его указания тормоза обеспечены.
В запросах веб-интерфейса сам С+ местами пишет where global_id=0 ...
21.11.2013 13:07
Dim
 
афигеть... 2 часа ждал, а с глобал_ид за 20 сек все сформировалось!!!
Часовой пояс GMT +3, время: 07:51.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.