![]() |
|
Модераторы: skyboy |
![]()
|
|
| savmp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 260 Регистрация: 27.7.2009 Где: Геленджик Репутация: -2 Всего: -16 |
Есть запрос... работает всё нормально, НО не так как нужно!
SELECT * FROM TABLE WHERE CALL_TARIFF = 'VIP' OR CALL_TARIFF = 'ECONOM' UNION SELECT * FROM TABLE WHERE CALL_TARIFF = 'FREE' ORDER BY RAND () Запрос вытягивает сначала строки с параметром тарифа VIP или ECONOM а затем UNION вытягивает строки с параметром тарифа FREE если я пишу в конце ORDER BY RAND () то всё перемешивается как каша получается... А нужно, что бы сначало выводились перемешанные между собой тарифы VIP и ECONOM а уж потом в конце выводились перемешанные между собой тариф FREE Помогите! |
|||
|
||||
| tzirechnoy |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 2 Всего: 16 |
А Вы так не делайте. Вообще, в GROUP BY/ORDER BY не следует использовать нечистых функцый. А в WHERE -- лучшэ поостеречься. Нужэн random -- возьмите какой-нибудь хэш от primary key. Нужэн каждый раз разный рандом -- заведите вне SQL какую-нибудь переменную в качестве рандома, и используйте её в качестве соли.
(пример для постгреса, где md5 есть в комплекте, call_name и call_id -- условно primary key из Вашэй таблицы). |
||||
|
|||||
| Свят86 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 25.12.2008 Репутация: нет Всего: нет |
тоже интересует данный вопрос! сортировка под запросов по отдельности
есть запрос на выборку данных вида: select 1.1, 2.1, 1.2 from 2 inner join 1 on 2.2=1.1 where (тут сложное условие на отбор) union all select 1.1, 2.1, 1.2 from 2 inner join 1 on 2.2=1.1 where (тут тоже сложное условие на отбор) 1 и 2 это номера таблиц, а подпункты номера полей. то есть у меня получается две объединенные выборки и мне нужно сделать сортировку каждой части по полю 1.1 очень важно чтоб в таблице у меня шла сначала первая (отсортированная по полю 1.1 ) часть, а потом следом вторая (также отсортированная по полю 1.1) часть! вставка select 1.1, 2.1, 1.2 from 2 inner join 1 on 2.2=1.1 where (тут сложное условие на отбор) order by 1.1 union all select 1.1, 2.1, 1.2 from 2 inner join 1 on 2.2=1.1 where (тут тоже сложное условие на отбор) результата не дало, а вставка order by 1.1 в конец, соответственно сортирует всю выборку... P.S. в поле 1.2 у меня стоят даты,и в первой части даты за последние пол года, а во второй более поздние, если это как-то поможет... Это сообщение отредактировал(а) Свят86 - 5.4.2012, 16:40 |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Свят86, подмешайте в результат вывода суррогатные значения, а затем сортируйтесь по ним.
Это сообщение отредактировал(а) Zloxa - 5.4.2012, 16:56 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Свят86 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 25.12.2008 Репутация: нет Всего: нет |
спасибо большое!
|
|||
|
||||
| Свят86 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 25.12.2008 Репутация: нет Всего: нет |
да... выявилась еще одна проблема в моем этом запросе... сложное условие на отбор выглядит так:
(((1.2) In (Select max(1.2) from 1 Group By 1.1) and (1.2)>Now()-150))) ну а вторая часть (1.2)<=Now()-150 как я уже писал в поле 1.2 у меня дата и если в таблице 1 самая свежая дата по полю 1.1 встречается два раза, то и запрос выкидывает обе записи! тоесть он не может он отбирая максимальные записи, берет их обе! как эту беду отсечь? P.S. запрос в Access. |
|||
|
||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Вместо
(фрагмент, кстати, выглядит бредово - нахрена тут группировка?) используйте
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| Свят86 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 25.12.2008 Репутация: нет Всего: нет |
спасибо за оперативный ответ, но first все равно почему-то дает оба варианта...
а вариант с order by пишет что попытка выполнить запрос, который не включает 1.2 как часть агрегатной функции... |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
Вы хотите сказать, что подзапрос
возвращает две записи??? не верю... Хотя по поводу его использования я неправ - сортировка-то будет выполняться после агрегатки... Давайте так - всё-таки дайте полный текст запроса, отформатированный по-человечески и обрамлённый соотв. тегом. А то складывать ваши лапшеобразные ошмётки в что-то цельное - затруднительно. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Свят86 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 25.12.2008 Репутация: нет Всего: нет |
я начал догонять! что max что first возвращают одну дату! самую последнюю! а у меня же получается
так вот In возвращает одну отобранную дату, а таких же дат относящихся к полю 1.1 получается две! вот запрос две записи и отбирает! как оставить одну? без разницы какую... Это сообщение отредактировал(а) Свят86 - 6.4.2012, 10:41 |
|||
|
||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
1)
2) UNION тут не нужен, равно как и синтетическое поле. Вполне достаточно (пока с кривым подзапросом)
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| Свят86 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 25.12.2008 Репутация: нет Всего: нет |
Спасибо за Ваше решение!
в поле 1.2 у меня даты, по которым идет группировка, сначала идут отсортированные записи у которых дата >Now()-150 а потом остальные тоже отсортированные. все работает хорошо, но когда к записи 1.1 (к ней идет много дат) самая свежая дата не одна, а две или три (12.01.12 еще запись тоже 12.01.12) то в результирующем запросе они обе отображаются... а мне нужно чтоб она была одна и неважно какая, потому как у меня получается поле 1.1 поле 2.1 поле 1.2 а 1 10.03.12 б 15 12.01.12 б 15 12.01.12 эта запись лишняя! и получилась из за того что самая последняя дата по ней в таблице 1 встречается два раза(было два обращения в эту дату) в 21 15.03.12 аг 18 10.03.11 бф 14 12.05.11 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 45 Всего: 454 |
И всего-то? добавьте distinct.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Свят86 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 25.12.2008 Репутация: нет Всего: нет |
спасибо большое!
спасибо большое! |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |