powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / непонимаю отчего пропадают данные в выборке
15 сообщений из 15, страница 1 из 1
непонимаю отчего пропадают данные в выборке
    #39726686
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Коллеги, не понимаю что происходит с выборкой и что я делаю не так :(
Если я выполняю такой запрос, то в наборе данных я вижу только 7 строк по cls_seq_no='870'.
Если я раскомментирую нижеуказанные строки, то вижу правильный набор из 35 строк.
csi.UPDATE_DATE в обоих выборках это сегодняшняя дата.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
select * from (
	SELECT
	   csi.body_no, 
	   csi.frame_no, 
	   csi.cls_seq_no,						
	   csi.EQUIP_CODE, 
	   csi.STATION_NO,
	   csi.LR_TYPE,
	   csi.TOTALRESULT_CODE,
	   csi.UPDATE_DATE		 
        FROM LINE05_QUALITY_COMMON_TBL csi
	where
	   csi.UPDATE_DATE between sysdate-20 and sysdate --take for last 20 days (NG may be)
            --and csi.cls_seq_no='870'
            --and csi.body_no='66954'
	order by csi.UPDATE_DATE desc)
where
   rownum<2001



Направьте на путь истины, пожалуйста.

Огромное спасибо!
...
Рейтинг: 0 / 0
непонимаю отчего пропадают данные в выборке
    #39726703
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kast2K,

остальные 28 строк расположилисть после 2000-й строки
....
sta
...
Рейтинг: 0 / 0
непонимаю отчего пропадают данные в выборке
    #39726709
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

Но ведь исходная выборка отсортирована по дате\времени
...
Рейтинг: 0 / 0
непонимаю отчего пропадают данные в выборке
    #39726711
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kast2K,

Вы выводите 2000 строк и из них только 7 с Вашим условием, когда Вы это условие прописываете - то выбораете только с учетом этого условия (их 35 по вашим словам) и они попадают в условик 2000 строк.

Уберите условие rownum<2001 и будет Вам счастье
...
Рейтинг: 0 / 0
непонимаю отчего пропадают данные в выборке
    #39726715
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

т.е., например, данная деталь за номером 870 проходила первую точку в 14:42:51
последняя 35-я строчка записалась в 14:57:19

после этого прошло ещё 28 деталей с таким же количеством записей.
выборка в 2000 строк по любому должна покрывать данный диапазон
...
Рейтинг: 0 / 0
непонимаю отчего пропадают данные в выборке
    #39726717
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kast2K,

Вывидите
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
select rownum, * from (
	SELECT
	   csi.body_no, 
	   csi.frame_no, 
	   csi.cls_seq_no,						
	   csi.EQUIP_CODE, 
	   csi.STATION_NO,
	   csi.LR_TYPE,
	   csi.TOTALRESULT_CODE,
	   csi.UPDATE_DATE		 
        FROM LINE05_QUALITY_COMMON_TBL csi
	where
	   csi.UPDATE_DATE between sysdate-20 and sysdate --take for last 20 days (NG may be)
            --and csi.cls_seq_no='870'
            --and csi.body_no='66954'
	order by csi.UPDATE_DATE desc)


И сами посмотрите какие у них номера rownum
...
Рейтинг: 0 / 0
непонимаю отчего пропадают данные в выборке
    #39726721
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXL,

Спасибо.
Понял, что нужен другой алгоритм
...
Рейтинг: 0 / 0
непонимаю отчего пропадают данные в выборке
    #39726726
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги,
не могли бы вы пояснить как преобразовать приведенный код так, чтобы взять последние 2000 записей отсортированных по дате.
В MSSQL это было бы
Код: sql
1.
select top 2000 * from t order by UPDATE_DATE desc

, но как тогда сделать такое же в Oracle?

Спасибо.
...
Рейтинг: 0 / 0
непонимаю отчего пропадают данные в выборке
    #39726727
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извините, затупил к концу дня.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
	select *
from
(
  				SELECT
					   csi.body_no, 
	   				   csi.frame_no, 
					   csi.cls_seq_no,						
					   csi.EQUIP_CODE, 
					   csi.STATION_NO,
					   csi.LR_TYPE,
					   csi.TOTALRESULT_CODE,
					   csi.UPDATE_DATE,
                                           row_number() over (order by csi.UPDATE_DATE desc) as rn
				   FROM LINE05_QUALITY_COMMON_TBL csi
        )
				   where rn<2001


простите за беспокойство :)
...
Рейтинг: 0 / 0
непонимаю отчего пропадают данные в выборке
    #39726729
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
непонимаю отчего пропадают данные в выборке
    #39726745
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kast2Kпростите за беспокойство :)
результат будет как и с 21721697 (без учета csi.UPDATE_DATE between sysdate-20 and sysdate)

.....
stax
...
Рейтинг: 0 / 0
непонимаю отчего пропадают данные в выборке
    #39726803
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kast2Kне могли бы вы пояснить как преобразовать приведенный код так, чтобы взять последние 2000 записей отсортированных по дате.
В MSSQL это было бы
Код: sql
1.
select top 2000 * from t order by UPDATE_DATE desc

, но как тогда сделать такое же в Oracle?

Вы и сделали ровно то, что просите.
Ваша проблема связана с тем, что требуемый код 870, не входящий в ключ упорядочивания, не попадает в топ - на MSSQL было бы то же самое.
oracle позволяет решить эту задачу несколькими способами - традиционный rownum
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SQL> 
select t.*, rownum r2 from
( select object_name, rownum r1
    from all_objects
   where owner = 'SYS'
   order by object_name
) t
where rownum < 10;
OBJECT_NAME                                                                              R1         R2
-------------------------------------------------------------------------------- ---------- ----------
/aaafddd5_PatternUnixDot                                                              32332          1
/aaa0d625_BinXMLDecodeReader                                                          39554          2
/aaa134fc_DOMImplementationLis                                                        34867          3
/aaa55844_ConstantLong                                                                21199          4
/aaa6cf74_PortableRemoteObject                                                        27553          5
/aaa7f9f4_AOMEntry4                                                                   27472          6
/aabb8dfe_UnsafeQualifiedStati                                                        34213          7
/aabd050b_ScheduledFuture                                                             33254          8
/aabf998f_NotificationEmitter                                                         28973          9
9 rows selected

SQL> 



аналитика
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select t.* from
( select object_name, rownum r1
       , row_number() over(order by object_name) r2
    from all_objects
   where owner = 'SYS'
) t
where r2 < 10;
OBJECT_NAME                                                                              R1         R2
-------------------------------------------------------------------------------- ---------- ----------
/aaafddd5_PatternUnixDot                                                              32332          1
/aaa0d625_BinXMLDecodeReader                                                          39554          2
/aaa134fc_DOMImplementationLis                                                        34867          3
/aaa55844_ConstantLong                                                                21199          4
/aaa6cf74_PortableRemoteObject                                                        27553          5
/aaa7f9f4_AOMEntry4                                                                   27472          6
/aabb8dfe_UnsafeQualifiedStati                                                        34213          7
/aabd050b_ScheduledFuture                                                             33254          8
/aabf998f_NotificationEmitter                                                         28973          9
9 rows selected

SQL> 



Row limiting кляуза:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
select object_name, rownum r1
  from all_objects
 where owner = 'SYS'
order by object_name
fetch first 9 rows only;
OBJECT_NAME                                                                              R1
-------------------------------------------------------------------------------- ----------
/aaafddd5_PatternUnixDot                                                              32332
/aaa0d625_BinXMLDecodeReader                                                          39554
/aaa134fc_DOMImplementationLis                                                        34867
/aaa55844_ConstantLong                                                                21199
/aaa6cf74_PortableRemoteObject                                                        27553
/aaa7f9f4_AOMEntry4                                                                   27472
/aabb8dfe_UnsafeQualifiedStati                                                        34213
/aabd050b_ScheduledFuture                                                             33254
/aabf998f_NotificationEmitter                                                         28973
9 rows selected

SQL> 



Кроме того, можно просто проfetchить требуемое количество записей из курсора.
...
Рейтинг: 0 / 0
непонимаю отчего пропадают данные в выборке
    #39726825
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kast2K,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with t (x,y) as (
                          select 1, 10 from dual
                union all select 2, 10 from dual
                union all select 3, 10 from dual
                union all select 4, 20 from dual
                union all select 5, 20 from dual
                union all select 6, 20 from dual
)



Код: plsql
1.
2.
3.
4.
select rownum, a.*
from (select * from t order by x) a
where rownum <= 4
order by x


ROWNUMXY1110221033104420

Код: plsql
1.
2.
3.
4.
select rownum, a.*
from (select * from t where y = 20 order by x) a
where rownum <= 4
order by x


ROWNUMXY142025203620

Код: plsql
1.
2.
3.
4.
5.
6.
7.
select * from
(
select rownum, a.*
from (select * from t order by x) a
)
where y = 20
order by x


ROWNUMXY442055206620
...
Рейтинг: 0 / 0
непонимаю отчего пропадают данные в выборке
    #39726834
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select * from
(
select rownum rn, a.*
from (select * from t order by x) a
)
where y = 20 and rn <=4 
order by x


RNXY4420
...
Рейтинг: 0 / 0
непонимаю отчего пропадают данные в выборке
    #39726925
Фотография Kast2K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous, SkilledJunior , Stax ,
Спасибо за разъяснения и примеры!
Я разобрался :)
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / непонимаю отчего пропадают данные в выборке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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