Форум по программному обеспечению и оборудованию > > >

Запрос, выводящий топ карт с максимальными суммами покупок за определенный период

03.12.2016 9:56


[ОТВЕТИТЬ]
20.11.2013 11:24  
Dim
нужен запрос, выводящий топ, ну например 10, карт с максимальными суммами покупок за определенный период.
 
20.11.2013 14:45  
vdm
Карты есть разные, клиентские и дисконтные.
 
20.11.2013 14:46  
Dim
клиентские
 
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;
 
"Спасибо" vdm от:
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
 
"Спасибо" vdm от:
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 ...
 
"Спасибо" vdm от:
21.11.2013 13:07  
Dim
афигеть... 2 часа ждал, а с глобал_ид за 20 сек все сформировалось!!!
 
 






- - RSS - - Карта - 👫 Яндекс.Метрика