НАЙТИ уникальный идентификатор в оракуле sql - PullRequest
0 голосов
/ 24 января 2019

Мне нужно найти уникального ПОЛЬЗОВАТЕЛЯ для каждого идентификатора. Идентификатор должен иметь «3» для SRC и «Ноль» для даты ИЛИ, если дата не равна нулю, тогда потребуется пользователь с максимальной датой и «3» для SRC. Я могу получить каждую часть отдельно, но мне трудно заставить ее работать для обоих сценариев ниже. Название таблицы MGR. Спасибо.

Я бы хотел, чтобы результаты были:

  1. ID = 456 и ПОЛЬЗОВАТЕЛЬ = ПСМИТ
  2. ID = 789 и USER = TREFF

enter image description here

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Вы можете реализовать фильтр в предложении where с коррелированным подзапросом, чтобы получить последний идентификатор

SELECT

FROM 
    mytable t
WHERE 
    t.src = 3
    AND (
        t.date IS NULL
        OR t.date = (
            SELECT MAX(t1.date) FROM mytable t1 WHERE t1.id = t.id AND t1.src = t.src
        )
    )
0 голосов
/ 25 января 2019

Я думаю, что стандартный ROW_NUMBER запрос должен работать здесь:

WITH cte AS (
    SELECT t.*, ROW_NUMBER() OVER (PARTITION BY t.ID ORDER BY t.DATE DESC) rn
    FROM yourTable
    WHERE SRC = 3
)

SELECT ID, USER
FROM cte
WHERE rn = 1;

enter image description here

Демо

Причина, по которой это работает, заключается в том, что значения NULL сортируются последними в порядке возрастания или сначала в порядке убывания. Так как номер строки выше сортируется по убыванию по дате, это означает, что NULL даты, если они присутствуют, будут отсортированы первыми, в противном случае более новая дата будет появляться первой.

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