Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема TOP 1 (число прочтений - 2366 )
Bibr
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Июня 2009
TOP 1
24. Декабря 2009 :: 07:42
Печать  
Дана таб1
Code Descr      Descr2      Descr3
1    iop             effef      ger
1    pok            efw      greg
1    зль            ewerf      grge
2    lo;               ewf      grege
2    kpo[            hyr      jytj
3    джл            рено      egr
3    оджолж      wef      dweer

необходимо сделать выборку
1    iop        effef      ger
2    lo;                  ewf      grege
3    джл        рено      egr

не пойму как здесть top 1 применить.

  
Наверх
 
IP записан
 
Bibr
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Июня 2009
Re: TOP 1
Ответ #1 - 24. Декабря 2009 :: 07:44
Печать  
сделал врем. таблицу уникальных значений
Таб2
Code
1
2
3

но как с ней теперь связать Таб1 чтобы было то что надо не могу понять
Печаль
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: TOP 1
Ответ #2 - 24. Декабря 2009 :: 08:00
Печать  
Bibr писал(а) 24. Декабря 2009 :: 07:44:
сделал врем. таблицу уникальных значений
Таб2
Code
1
2
3

но как с ней теперь связать Таб1 чтобы было то что надо не могу понять
Печаль


А select distinct Code, итд уже отменили чтоли?
  
Наверх
 
IP записан
 
slider26
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 256
Зарегистрирован: 01. Июня 2006
Re: TOP 1
Ответ #3 - 24. Декабря 2009 :: 08:01
Печать  
SELECT DISTINCT code не подойдет?
Правда не факт, что он возьмет первые значения.
Для этого нужен ORDER по к-л полю

Дааа... ответили одновременно  Смех
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: TOP 1
Ответ #4 - 24. Декабря 2009 :: 08:05
Печать  
Формально порядок перебора записей без секции ORDER BY неопределён. Т.ч. для решения тебе нужно или придумать такой ORDER BY, при котором именно указанные записи окажутся первыми, или ввести в таблицу уникальный ключ (как показал toypaul на мисте).
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Bibr
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 49
Зарегистрирован: 10. Июня 2009
Re: TOP 1
Ответ #5 - 24. Декабря 2009 :: 08:29
Печать  
Distinct же действует на ВСЮ запись.
таблицу
1
2
3
я уже получил.
Дальше то как?
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: TOP 1
Ответ #6 - 24. Декабря 2009 :: 08:38
Печать  
Самое быстрое и т.к. в сабже не указал порядок

Select
 // здесь извлекаем подстроки из MaxDescr
(Select
Max(Tabl.Descr    +  Tabl.Descr2    +  Tabl.Descr3 ) as MaxDescr,
Tabl.id
From Tabl
GRoup by Tabl.id)

если нужен другой порядок добавляем поле порядка в Мах, например нумерацию строк
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: TOP 1
Ответ #7 - 24. Декабря 2009 :: 09:10
Печать  
(0) Нужен вообще то какой то порядок записей
Также если descr имеют тип varchar нужны разделители чтобы не сливались поля
101   1   23  45
101   12 34  5

Код
Выбрать все
select * from tab1 z1
where not exists
   (select z2.code from tab1 z2
    where z1.code = z2.code
    and (z2.descr  + z2.descr2 + z2.descr3< z1.descr  + z1.descr2 + z1.descr3 )
   ) 



  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: TOP 1
Ответ #8 - 24. Декабря 2009 :: 09:35
Печать  
Bibr писал(а) 24. Декабря 2009 :: 08:29:
Distinct же действует на ВСЮ запись.
таблицу
1
2
3
я уже получил.
Дальше то как?


Никак.
Нужно еще одно поле для связки, тогда бы inner join on Code and Descr, например. И все получилось бы.
  
Наверх
 
IP записан
 
val
Full Member
***
Отсутствует


Дорогу осиливает идущий

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: TOP 1
Ответ #9 - 24. Декабря 2009 :: 12:46
Печать  
(0)
1. Первым подзапросом выбираешь свою таблицу и нумеруешь строки подряд: http://www.sql.ru/faq/faq_topic.aspx?fid=126 , например способ 4.
2. Вторым подзапросом выбираешь из первого строки с одинаковым CODE и минимальным номером строки.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать