нужно сделать запрос выборки количества клиентов сделавших 2 и более заказов, общее количество клиентов это я запросто, а вот хотят что бы выводилось по дням и неделям, то есть по нарастающей
6-6-2012 5
7-6-2012 8
8-6-2012 10
таблица заказов uc_orders
order_id - номер заказа
uid - id пользователя
created - дата создания
есть еще поля но они не имеют к этому отношения
таблица date
поле то date ))
есть еще вспомогательная таблица в которой просто по порядку идут даты, относительно которой выстраивается статистика, из за того что иногда бывают дни когда для одной статистики нет данных и запрос выводит данные без этого дня, а потом другой запрос выводит данные у которых другие дни отсутствуют и потом ничего не сходится, а так если день пропущен то просто пустота получается при Left join когда нет данных
есть вот такой вот запрос из последних вариантов который не дает результата который я хочу и реально губителен))) для производительности,
CODE ( SQL):
скопировать код в буфер обмена
SELECT d.date, FROM_UNIXTIME(o.created, '%Y-%m-%d') AS created, o.uid, count(o.uid) FROM uc_orders o LEFT JOIN date AS d ON FROM_UNIXTIME(o.created, '%Y-%m-%d') = DATE(d.date) WHERE o.order_status <> 'canceled' AND o.created > UNIX_TIMESTAMP('2012-06-06 00:00:00') AND o.uid <> 0 AND o.uid IN (SELECT oo.uid FROM uc_orders oo WHERE oo.created > UNIX_TIMESTAMP('2012-06-06 00:00:00') AND oo.order_status <> 'canceled' AND FROM_UNIXTIME(o.created, '%Y-%m-%d') <= DATE(d.date) GROUP BY oo.uid HAVING COUNT(oo.order_id)>1) GROUP BY d.date
как я себе представляю это должно работать:
проходим по датам после делается выборка проверка по заказам у кого есть 2 заказа и более но при этом дата заказа должна быть менmше или равна дате из первой таблицы date
|