с учетом возрастающего значения идентификатора и созданной даты создайте оператор SQL, чтобы определить, не совпадают ли какие-либо даты с идентификатором в Oracle. - PullRequest
0 голосов
/ 30 мая 2019

Учитывая таблицу как ниже: создан TIMESTAMP (6), а ID является НОМЕР (20,0)

| ID | CREATED                    | ...
| 1  | 2019-11-01 14:19:28.611000 | ...
| 2  | 2019-11-01 14:19:28.680000 | ...

Определите все строки, в которых даты CREATED не совпадают, с возрастающими значениями идентификатора.
Если значения упорядочены по идентификатору, любое значение равно CREATED <предыдущее значение CREATED. </p>

Я попытался это сделать, и обнаружил, что моя версия ужасна, а не возвращает результаты. Я уверен, что мне не хватает эффективности в запросе.

В качестве вывода мне нужен ID / CREATED строк, которые находятся вне шага.

Ответы [ 2 ]

1 голос
/ 30 мая 2019

похоже, вам нужна аналитическая функция lead() для сравнения строки следующего уровня с током, и если она больше текущей, то она поступит на ваш вывод

with cte as
(
select id,CREATED,lead(CREATED) over(order by id) as NR
from t
) select id,created from cte where CREATED>NR
0 голосов
/ 30 мая 2019

Используя ROW_NUMBER(), вы можете сгенерировать номера заказов по ID и CREATED, а затем сопоставить их друг с другом:

select *
  from (select t.*,
               row_number() over(order by id) as id_order,
               row_number() over(order by created, id) as created_order
          from t)
 where id_order <> created_order

Для created_order Я сортирую по created и id на всякий случай, если created содержит дублированные значения.

Этот запрос вернет все затронутые строки. Например, для таких данных:

| ID | CREATED                    | ...
| 1  | 2019-11-01 14:19:28.611000 | ...
| 2  | 2019-11-01 14:19:28.680000 | ...
| 3  | 2019-11-01 14:19:28.612000 | ...
| 4  | 2019-11-01 14:19:28.613000 | ...
| 5  | 2019-11-01 14:19:28.681000 | ...
| 6  | 2019-11-01 14:19:28.681000 | ...

запрос вернет строки 2, 3 и 4.

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