Как правильно упорядочить ORDER BY?

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Sparton
Сообщения: 28
Зарегистрирован: 22 фев 2007, 10:38

Как правильно упорядочить ORDER BY?

Сообщение Sparton » 20 сен 2007, 15:16

имеется запрос

Код: Выделить всё

SELECT ev.ID, ev.NAME,
          (select first 1 skip 0 ee.www  from events ee where ee.id_id = ev.id order by ee.data_on desc) www,
          (select first 1 skip 0 ee.data_on from events ee where ee.id_id = ev.id order by ee.data_on desc) data_last
          FROM EVENTS_MAIN ev
          WHERE not exists (select e.id_id from events e where e.data_on>current_date AND e.id_id = ev.ID) AND ev.STATUS=1
          order by data_last
не срабатывает, сообщает Column unknown.
DATA_LAST.
Как правильно указать, что упорядочивать по DATA_LAST?

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 20 сен 2007, 15:29

Код: Выделить всё

order by 4
А в следующий раз, не забывай указывать версию сервера.

Sparton
Сообщения: 28
Зарегистрирован: 22 фев 2007, 10:38

Сообщение Sparton » 20 сен 2007, 15:31

dimitr писал(а):

Код: Выделить всё

order by 4
А в следующий раз, не забывай указывать версию сервера.
Точно! Благодарю! Не забуду)

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 20 сен 2007, 22:40

Sparton писал(а):
dimitr писал(а): Точно! Благодарю! Не забуду)
Версию, впрочем так и не указал... :)

Sparton
Сообщения: 28
Зарегистрирован: 22 фев 2007, 10:38

Сообщение Sparton » 21 сен 2007, 12:17

Kotъ-Begemotъ писал(а): Версию, впрочем так и не указал... :)
Исправляюсь) FB 1.5))
Да, вот ещё такой вопрос возник, можно ли как то в запросе его решить,

Код: Выделить всё

select distinct(t1.ID), t1.NAME, t2.CATEGORY from tbl1 
join tbl2 t2 ON(t2.ID_ID = t1.ID)
результатом будет
  • 1 | авто | выставка
    2 | авто | показ
Distinct в данном случае не сработал. Можно ли каким то образом брать только первую запись? Или вторую, без разницы. FB 1.5 :wink:

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 21 сен 2007, 12:26

Sparton писал(а):Distinct в данном случае не сработал.
Дистинкт в данном случае сработал, как нужно. Это ты не знаешь, что это такое :wink:
Почитай про FIRST / SKIP

Sparton
Сообщения: 28
Зарегистрирован: 22 фев 2007, 10:38

Сообщение Sparton » 21 сен 2007, 14:14

WildSery писал(а): Почитай про FIRST / SKIP
А если выборка такая
  • 1 | авто | выставка
    1 | авто | презентация
    2 | авиа | шоу
    2 | авиа | выставка
    2 | авиа | чемпионат
    3 | яхтинг | шоу
    3 | яхтинг | соревнования
Так вот надо выбрать только скажем первый вид для типа, т.е. неважно какой вид у типа, авто - выставка или авто презентация. Нужен результат
  • 1 | авто | выставка
    2 | авиа | шоу
    3 | яхтинг | шоу
First 1 skip 0 я возьму тока первую запись из выборки...

Slavik
Сообщения: 115
Зарегистрирован: 17 янв 2007, 11:52

Сообщение Slavik » 21 сен 2007, 14:40

Код: Выделить всё

select t1.ID, t1.NAME, min(t2.CATEGORY)
  from tbl1 t1 join tbl2 t2 on t2.ID_ID = t1.ID
  group by t1.ID, t1.NAME
... и другие вариации на тему group by.

Ответить