Как нибудь реально все же сделать Group by после Odere by?

N
На сайте с 08.03.2010
Offline
13
452

Мне необходимо удалить повторения, но уже после отсортированной таблицы, сложность в том, что я использую арифметическую операцию в запросе и сортирую таблицу по результатам именно этой операции.

Как вариант быть может возможно в одном запросе объединить последовательно два запроса?

Собственно запрос выглядит следующим образом-


select Promotion.id, Promotion.listing_id, Promotion.account_id, Promotion.name, Listing.title,
(3956*2*atan2(sqrt(pow(sin((radians((iplocation.long))-radians((select `long` from `iplocation` where `postalcode`='92835' and country = 'us')))/2),2)*cos(radians((select `lat` from `iplocation` where `postalcode`='92835' and country = 'us')))*cos(radians((iplocation.lat)))+(pow(sin((radians((iplocation.lat))-radians((select `lat` from `iplocation` where `postalcode`='92835' and country = 'us')))/2),2))),sqrt(1-pow(sin((radians((iplocation.long))-radians((select `long` from `iplocation` where `postalcode`='92835' and country = 'us')))/2),2)*cos(radians((select `lat` from `iplocation` where `postalcode`='92835' and country = 'us')))*cos(radians((iplocation.lat)))+(pow(sin((radians((iplocation.lat))-radians((select `lat` from `iplocation` where `postalcode`='92835' and country = 'us')))/2),2))))) as distance
FROM Promotion, Listing, iplocation WHERE Listing.status='A' and Listing.status = 'A' AND Promotion.end_date >= DATE_FORMAT(NOW(), '%Y-%m-%d') AND Listing.promotion_id > 0 AND Listing.promotion_id = Promotion.id AND Listing.level IN (10,30,70) AND DATE_FORMAT(NOW(), '%Y-%m-%d') >= Promotion.start_date and iplocation.country = 'us' and iplocation.postalcode = Listing.zip_code
having distance < 5
order by distance

В этом запросе, я отсортировал все имеющиеся в базе магазины, по дальности от заданного пункта, используя having ограничил радиус поиска в 5 миль (использовал географические координаты, которые также имеются в базе). Теперь мне необходимо удалить повторяющиеся магазины, именно при этой последовательности. То есть, мне нужно удалить все повторяющиеся магазины, сохранив один, самый ближний.

ПОМОГИТЕ ПЛЗ!

AK
На сайте с 27.05.2009
Offline
34
#1

select distinct Promotion .....

М
На сайте с 08.02.2006
Offline
59
#2

SELECT * FROM (твой_запрос) GROUP BY поле

но... может существенно тормозить при большом объеме данных, возвращаемых вложенным запросом

N
На сайте с 08.03.2010
Offline
13
#3
Магнат:
SELECT * FROM (твой_запрос) GROUP BY поле

но... может существенно тормозить при большом объеме данных, возвращаемых вложенным запросом

Ошибка - every derived table must have its own alias

nwarap добавил 02.03.2011 в 20:08

Магнат:
SELECT * FROM (твой_запрос) GROUP BY поле

но... может существенно тормозить при большом объеме данных, возвращаемых вложенным запросом

Хотя в принципе спасибо!

Надо было SELECT * FROM (твой_запрос) any GROUP BY поле

То есть имя указать.

А не подскажешь как можно использовать distinct on?

Просто distinct меня не устраивает.

Либо distinct on будет еще медленее????

М
На сайте с 08.02.2006
Offline
59
#4
А не подскажешь как можно использовать distinct on?

Никак. Хотя возможен синтаксис вида SELECT DISTINCT(поле), поле1, поле2, ...

Вообще DISTINCT - это частный случай GROUP BY со всеми вытекающими

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий