Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.02.06;
Скачать: CL | DM;

Вниз

top2 по каждому значению условия   Найти похожие ветки 

 
Sergey2   (2009-09-03 15:49) [0]

можно  выбрать как то только 2 записи (top 2) по каждому значению условия?

вот такая выборка :

field1   field2
1         aa
1         bb
1         cc
2         aaa
2         bbb
2         ccc
2         ddd

по каждому field1 только первые 2 записи.
результат вот такой что бы получился

1 aa
1 bb
2 aaa
2 bbb
....

select top 2 field1, field2
from mytable
where field1 = 1
order by field2
union
select top 2 field1, field2
from mytable
where field1 = 2
order by field2
....

вот такой запрос поидее подходит. вот только в таблице 160000 записей.


 
Ega23 ©   (2009-09-03 16:54) [1]

group by?


 
Sergey2   (2009-09-03 17:09) [2]

по какому полю ?

select field1
from mytable
group by field1

1
2
3
5
....
160000

вернет необходимые коды... но по каждому из них необходимо взять из той же таблицы топ 2 полей field2

что бы получить

1    aa
1    bb
2    aaa
2    bbb
3    a1
3    b1
5    aa1
5    bb1
....
160000   aaaa11
160000   bbbb11

Как можно это в одном запросе сделать ?


 
stas ©   (2009-09-03 17:31) [3]

Если MSSQL 2005
select * from mytable as m outer apply (select top2 * from mytable where mytable.field1=m.field1)


 
stas ©   (2009-09-03 17:33) [4]

или даже так
select * from (select distinct field1 from mytable) as m outer apply (select top2 * from mytable where mytable.field1=m.field1)


 
adigozelov ©   (2009-09-04 00:55) [5]

privet atvet takoy

stolba "id" zdes Счетчик

select *  from mytable as  mytable2  where
id in ( select top 2 id from mytable where field1=mytable2.field1)


 
Sergey2   (2009-09-04 09:30) [6]

stas
отличный запрос. посмотрел в хелпе - то что нужно. sql вот только 2000 и там такого оператора нет. есть ли нечто подобное в 2000 ?

хотя идея предложенная adigozelov так же должна отработать. попробую ключевое автоинкрементное поле  добавить в таблицу

Спасибо за ответы


 
СовестьДМ ©   (2009-09-04 18:45) [7]


> adigozelov ©   (04.09.09 00:55) [5]

прежде чем что-то советовать рекомендуется испытывать на себе


 
sniknik ©   (2009-09-04 19:42) [8]

монстрообразно, но должно сработать и в 2000м ...
SELECT f1,(SELECT TOP 1 f2 FROM Table1 WHERE a.f1=f1) FROM (SELECT DISTINCT f1 FROM Table1) a
UNION ALL
SELECT f1,(SELECT TOP 1 f2 FROM Table1 WHERE a.f1=f1 AND f2<>(SELECT TOP 1 f2 FROM Table1 WHERE a.f1=f1)) FROM (SELECT DISTINCT f1 FROM Table1) a
ORDER BY f1

вот за скорость не ручаюсь...


 
adigozelov ©   (2009-09-04 22:29) [9]


> СовестьДМ

Slushuy ya paprobul mojut bit v ni paprobili!


 
СовестьДМ ©   (2009-09-04 22:40) [10]


> adigozelov ©   (04.09.09 22:29) [9]

ну и как оно?


 
adigozelov ©   (2009-09-04 22:55) [11]


> СовестьДМ

Sazdayci table vot takoy

id +
field1 int
field2 varchar(50)

i zdeliyici insert! a patom zdeliyici moy zapros i vidici shto eta rapotayit!


 
СовестьДМ ©   (2009-09-05 18:17) [12]


> adigozelov ©   (04.09.09 22:55) [11]

да вы правы
я не учел что вхождение делаем по идентификатору

считаю что запрос adigozelov ©   (04.09.09 00:55) [5] самый простой и БЫСТРЫЙ


 
Sergey2   (2009-09-08 15:12) [13]

adigozelov ©.

всё верно - ещё раз спасибо за решение. все получилось



Страницы: 1 вся ветка

Текущий архив: 2011.02.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
15-1288158923
palva
2010-10-27 09:55
2011.02.06
Microsoft побеждает


6-1233781685
HITMAN
2009-02-05 00:08
2011.02.06
Удалённый рабочий стол.


15-1287842168
Фокс Йовович
2010-10-23 17:56
2011.02.06
Налог на чистые болванки и флэшки


15-1286748616
Германн
2010-10-11 02:10
2011.02.06
Инструмент для редактирования иконок


6-1233563581
vegarulez
2009-02-02 11:33
2011.02.06
Вопрос про разбор параметров запроса.