Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / непонимаю отчего пропадают данные в выборке / 15 сообщений из 15, страница 1 из 1
01.11.2018, 15:55
    #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
01.11.2018, 16:17
    #39726703
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонимаю отчего пропадают данные в выборке
Kast2K,

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

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

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

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

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

после этого прошло ещё 28 деталей с таким же количеством записей.
выборка в 2000 строк по любому должна покрывать данный диапазон
...
Рейтинг: 0 / 0
01.11.2018, 16:23
    #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
01.11.2018, 16:29
    #39726721
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонимаю отчего пропадают данные в выборке
MaximaXXL,

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

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

Спасибо.
...
Рейтинг: 0 / 0
01.11.2018, 16:44
    #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
01.11.2018, 16:45
    #39726729
SkilledJunior
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонимаю отчего пропадают данные в выборке
...
Рейтинг: 0 / 0
01.11.2018, 17:15
    #39726745
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонимаю отчего пропадают данные в выборке
Kast2Kпростите за беспокойство :)
результат будет как и с 21721697 (без учета csi.UPDATE_DATE between sysdate-20 and sysdate)

.....
stax
...
Рейтинг: 0 / 0
01.11.2018, 19:10
    #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
01.11.2018, 20:09
    #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
01.11.2018, 20:19
    #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
02.11.2018, 07:50
    #39726925
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
непонимаю отчего пропадают данные в выборке
andrey_anonymous, SkilledJunior , Stax ,
Спасибо за разъяснения и примеры!
Я разобрался :)
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / непонимаю отчего пропадают данные в выборке / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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