Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как выбрать первые N ресордов? СРОЧНО!!! / 12 сообщений из 12, страница 1 из 1
15.05.2003, 18:35
    #32161113
Как выбрать первые N ресордов? СРОЧНО!!!
Я ДЕЛАЮ СЕЛЕКТ:
select time_key,pdu_type,smsc_key,esme_key,total_calls,count(*)
from AGG_SMPP_DATA
where pdu_type in (4,5)
and time_key<3group by time_key,pdu_type,smsc_key,esme_key,total_calls
order by time_key,total_calls desc;
и получаю:
TIME_KEY PDU_TYPE SMSC_KEY ESME_KEY TOTAL_CALLS COUNT(*)
---------- ---------- ---------- ---------- ----------- ----------
1 4 1 1 147 1
1 4 2 2 147 1
1 5 1 1 127 1
1 5 2 2 127 1
1 4 1 3 116 1
1 4 3 5 116 1
1 5 3 5 101 1
1 5 1 3 100 1
1 4 1 1 1 1
1 5 1 1 1 1
1 4 2 2 1 1
1 5 2 2 1 1
2 5 1 1 203 1
2 5 2 2 203 1
2 4 1 1 196 1
2 4 2 2 195 1
2 4 1 3 152 1
2 4 3 5 151 1
2 5 1 3 146 1
2 5 3 5 146 1
2 4 2 2 1 1
2 4 3 5 1 1

а мне надо только первые 5 для каждых time_key!!!
ЧТО ДЕЛАТЬ?? ПОМОГИТЕ ПЛЗ!!!
...
Рейтинг: 0 / 0
15.05.2003, 19:07
    #32161138
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выбрать первые N ресордов? СРОЧНО!!!
Oracle 8.1.7 Enterprise Edition

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
create table test (
    test_id number( 9 )
  , time_key number( 9 )
  , value number( 9 )
  , constraint pk_test primary key (test_id)
)
/

begin
  dbms_random.seed(sysdate);
  for i in  1 .. 50  loop
    for j in  1 .. 5  loop
      insert into test(test_id, time_key, value) 
      values (j* 100  + i, j, trunc(dbms_random.value *  10 ));
    end loop;
  end loop
  commit;
end;
/

select test_id
     , time_key
     , value
     , rank_
from (select test_id
           , time_key
           , value
           , rank() over(partition by time_key order by test_id) rank_
      from test
     )
where rank_ <=  5 
/
...
Рейтинг: 0 / 0
15.05.2003, 19:21
    #32161146
Гость6
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выбрать первые N ресордов? СРОЧНО!!!
select * from

(select rownum nm, time_key,pdu_type,smsc_key,esme_key,total_calls,count(*)
from AGG_SMPP_DATA
where pdu_type in (4,5)
and time_key<3group by time_key,pdu_type,smsc_key,esme_key,total_calls
order by time_key,total_calls desc) a where a.nm < 5;
...
Рейтинг: 0 / 0
15.05.2003, 19:22
    #32161147
Как выбрать первые N ресордов? СРОЧНО!!!
проблема в том что я не могу создать temp table я использую этот селест в
Crystal Reports :-((( и основная таблица интенсивно заселяется
...
Рейтинг: 0 / 0
15.05.2003, 19:28
    #32161149
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выбрать первые N ресордов? СРОЧНО!!!
Try:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
select  time_key,
        pdu_type,
        smsc_key,
        esme_key,
        total_calls,
        cnt 
  from (
        select  time_key,
                row_number() over(partition by time_key
                                  order by pdu_type,
                                           smsc_key,
                                           esme_key,
                                           total_calls
                                 ) rnum
                pdu_type,
                smsc_key,
                esme_key,
                total_calls,
                count(*) cnt
          from  AGG_SMPP_DATA 
          where pdu_type in (
                              4 ,
                              5 
                            ) 
            and time_key <  3 
          group by time_key,
                   pdu_type,
                   smsc_key,
                   esme_key,
                   total_calls
       )
  where rnum <  6 
  order by time_key,
           total_calls desc; 


SY.
...
Рейтинг: 0 / 0
15.05.2003, 19:32
    #32161151
.dba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выбрать первые N ресордов? СРОЧНО!!!
>проблема в том что я не могу создать temp table я использую этот селест в
>Crystal Reports :-((( и основная таблица интенсивно заселяется

А Вам Денис и не предлагал создавать temp table. Где Вы это увидили?

Проблема с Кристаллом будет в том, что там запрос строится сам на основе того, что вы нарисовали в отчете и эти заморочки с subquery он не понимает. Т.е. можно задать ему такой запрос, но параметры туда Вы передать не сможете. Или другая возможность написать его в Crystal SQL, но тогда он не будет работать через web (хотя может в последних версиях они это и пофиксили).
...
Рейтинг: 0 / 0
15.05.2003, 19:34
    #32161152
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выбрать первые N ресордов? СРОЧНО!!!
При чем тут временная таблица? Или ты про select .. from ... select ? Тогда можешь выкрутиться так: создай представление (view) из подзапроса, а в Crystall Reports сделай Set Location, указав вместо таблицы его.
...
Рейтинг: 0 / 0
15.05.2003, 19:35
    #32161154
Roman_M
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выбрать первые N ресордов? СРОЧНО!!!
SELECT * FROM (

select time_key,pdu_type,smsc_key,esme_key,total_calls,count(*)
from AGG_SMPP_DATA
where pdu_type in (4,5)
and time_key<3 group by time_key,pdu_type,smsc_key,esme_key,total_calls
order by time_key,total_calls desc)

WHERE rownum<6;
...
Рейтинг: 0 / 0
15.05.2003, 19:50
    #32161170
.dba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выбрать первые N ресордов? СРОЧНО!!!
2 Roman_M

Надо первые 5 из каждой группы, а не просто от всех возвращенных.
...
Рейтинг: 0 / 0
15.05.2003, 20:54
    #32161188
Как выбрать первые N ресордов? СРОЧНО!!!
SY, спасибо вам огромне,вы спасли мне жизнь!!! :-)
...
Рейтинг: 0 / 0
15.05.2003, 21:07
    #32161191
Roman_M
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выбрать первые N ресордов? СРОЧНО!!!
Упс, сорри, тогда SY все очень красиво расписал... Разработчик, наверное :-) У меня по-админски получилось...



select time_key,pdu_type,smsc_key,esme_key,total_calls,cnt from (
select time_key,pdu_type,smsc_key,esme_key,total_calls,count(*) cnt,
row_number() over (partition by time_key order by time_key, pdu_type,total_calls) r
from AGG_SMPP_DATA
where pdu_type in (4,5)
and time_key<3 group by time_key,pdu_type,smsc_key,esme_key,total_calls
order by time_key,total_calls desc)
where r<6
...
Рейтинг: 0 / 0
15.05.2003, 22:28
    #32161215
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как выбрать первые N ресордов? СРОЧНО!!!
> Упс, сорри, тогда SY все очень красиво расписал... Разработчик, наверное :-) У меня по-админски получилось...

DBA actually, not developer. But when you maintain ASP databases with hundreds of stored procedures, functions, packages, triggers, types, materialized views, nested tables, LOBs and "my favorite" external functions (sorry if I missed your favorites) any DBA would become a developer. And my "rulle#1" when developer comes to me with their code issues is "don't even try to appoach me with not formatted code". I am far from being a "neat freak" (especially in my "non DBA" life), but I strongly believe a lot of syntax errors and logic bugs are not detected simply because code is not formatted properly.

SY.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как выбрать первые N ресордов? СРОЧНО!!! / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]