max, over over by oracle, взять максимальную запись rownum - PullRequest
1 голос
/ 28 февраля 2020

Я пытаюсь вытащить максимальное значение rownum в разделе. Я получаю сообщение об ошибке ниже, поэтому мне нужна помощь, чтобы исправить мой SQL запрос. Я добавил номер строки и номер строки в разделе в моем запросе SQL. Код ниже. Я хочу взять максимум над этим разделом и несколько раз пытался изменить запрос, но продолжаю получать сообщения об ошибках, поэтому я застреваю. Мне нужна помощь. Пожалуйста, смотрите ниже код и сообщение об ошибке.

SELECT *,
max(rownum1) OVER (PARTITION BY id) as maxrownum1
from 
(
select
id, NAME_TYPE, NAME, EFFDT, 
rownum, 
ROW_NUMBER() OVER (PARTITION BY id ORDER BY rownum ASC) AS rownum1
FROM name_table 
) a
where a.rownum1=maxrownum1
and rownum<=2000

Сообщение об ошибке

ORA-00923: FROM keyword not found where expected
00923. 00000 -  "FROM keyword not found where expected"
*Cause:    
*Action:
Error at Line: 1 Column: 9

Ответы [ 2 ]

2 голосов
/ 28 февраля 2020

Это кажется очень любопытным. Вы не можете ссылаться на псевдоним в предложении where для select, который его определяет. Итак, поместите определение в подзапрос:

select t.*,
from (select id, NAME_TYPE, NAME, EFFDT, 
             rownum as rn, max(rownum) over (partition by id) as max_rownum
      from name_table 
     ) nt
where rn <= max_rownum and
      rownum <= 2000;
1 голос
/ 28 февраля 2020

Я думаю, что проблема с заказом вам нужна desc:

SELECT a.*
FROM (select nt.*
             ROW_NUMBER() OVER (PARTITION BY id ORDER BY rownum DESC) AS rownum1
      FROM name_table nt
      WHERE rownum <= 2000
     ) a
WHERE a.rownum1 = 1;

Таким образом, вы получите максимум rownum (при условии, что rownum имеет значимые данные).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...