Текущий архив: 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.47 MB
Время: 0.006 c