Здравствуйте, прошу помощи в составлении запроса. имеется таблица вида
CODE ( SQL):
скопировать код в буфер обмена
+--------+----------+-----------+---------------------+----+----------------------+ | IDUser | AllIn | AllOut | DTime | id | service10000_nowplan | +--------+----------+-----------+---------------------+----+----------------------+ | 34348 | 530253 | 1165477 | 2011-03-23 14:38:05 | 1 | 129 | | 34330 | 71304 | 136754 | 2011-03-23 14:38:05 | 2 | 129 | | 34325 | 0 | 8608 | 2011-03-23 14:38:05 | 3 | 130 | | 34310 | 705123 | 5905735 | 2011-03-23 14:38:05 | 4 | 140 | | 34297 | 76732944 | 60848616 | 2011-03-23 14:38:05 | 5 | 130 | | 34296 | 1221 | 6069 | 2011-03-23 14:38:05 | 6 | 131 | | 34293 | 319134 | 5919484 | 2011-03-23 14:38:05 | 7 | 140 | | 34289 | 5353280 | 2814296 | 2011-03-23 14:38:05 | 8 | 130 | | 34288 | 12818655 | 191865571 | 2011-03-23 14:38:05 | 9 | 131 | | 34287 | 177246 | 167516 | 2011-03-23 14:38:05 | 10 | 129 | +--------+----------+-----------+---------------------+----+----------------------+
про каждого абонента запись появляется примерно раз в пять минут.
мне необходимо выполнить запрос что бы узнать
сколько абонентов скачало на тарифном плане 129 10GB сколько 20 сколько 30 и тд
сейчас делаю так
CODE ( SQL):
скопировать код в буфер обмена
SELECT a.service10000_nowplan, a.iduser,round(sum(a.AllOut)/1073741824) AS IN_GB1 ,round(sum(a.AllOut)/1073741824,-1) AS IN_GBround FROM billing.traffic_per_user AS a WHERE a.service10000_nowplan =129 AND a.dtime>='2011-09-27' GROUP BY a.iduser HAVING round(sum(a.AllIn)/1073741824,-1)>10 ORDER BY round(sum(a.AllIn)/1073741824,-1)
то есть сумму allOut я округляю до 10ков гигабайт. но это на каждый интервал гигов (10,20,30) и тд необходимо выполнять отдельный запрос и так на каждый тариф.
Вот собственно хотелось бы узнать, быть может существует способо вывести сразу необходимую информацию ?
то есть ввожу в запросе тариф, и получаю что 10г скачало 230чел, 20г - 40чел и тд.
заранее спасибо
|