powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как выбрать первые N ресордов? СРОЧНО!!!
12 сообщений из 12, страница 1 из 1
Как выбрать первые N ресордов? СРОЧНО!!!
    #32161113
Я ДЕЛАЮ СЕЛЕКТ:
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
Как выбрать первые N ресордов? СРОЧНО!!!
    #32161138
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как выбрать первые N ресордов? СРОЧНО!!!
    #32161146
Гость6
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Как выбрать первые N ресордов? СРОЧНО!!!
    #32161147
проблема в том что я не могу создать temp table я использую этот селест в
Crystal Reports :-((( и основная таблица интенсивно заселяется
...
Рейтинг: 0 / 0
Как выбрать первые N ресордов? СРОЧНО!!!
    #32161149
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как выбрать первые N ресордов? СРОЧНО!!!
    #32161151
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>проблема в том что я не могу создать temp table я использую этот селест в
>Crystal Reports :-((( и основная таблица интенсивно заселяется

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

Проблема с Кристаллом будет в том, что там запрос строится сам на основе того, что вы нарисовали в отчете и эти заморочки с subquery он не понимает. Т.е. можно задать ему такой запрос, но параметры туда Вы передать не сможете. Или другая возможность написать его в Crystal SQL, но тогда он не будет работать через web (хотя может в последних версиях они это и пофиксили).
...
Рейтинг: 0 / 0
Как выбрать первые N ресордов? СРОЧНО!!!
    #32161152
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При чем тут временная таблица? Или ты про select .. from ... select ? Тогда можешь выкрутиться так: создай представление (view) из подзапроса, а в Crystall Reports сделай Set Location, указав вместо таблицы его.
...
Рейтинг: 0 / 0
Как выбрать первые N ресордов? СРОЧНО!!!
    #32161154
Roman_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Как выбрать первые N ресордов? СРОЧНО!!!
    #32161170
.dba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Roman_M

Надо первые 5 из каждой группы, а не просто от всех возвращенных.
...
Рейтинг: 0 / 0
Как выбрать первые N ресордов? СРОЧНО!!!
    #32161188
SY, спасибо вам огромне,вы спасли мне жизнь!!! :-)
...
Рейтинг: 0 / 0
Как выбрать первые N ресордов? СРОЧНО!!!
    #32161191
Roman_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Упс, сорри, тогда 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
Как выбрать первые N ресордов? СРОЧНО!!!
    #32161215
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Упс, сорри, тогда 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
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как выбрать первые N ресордов? СРОЧНО!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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