Извлечь поле на основе самого последнего значения, представленного в группе - PullRequest
1 голос
/ 02 мая 2020

Буду признателен, если смогу узнать, как go получить новое поле NAME1 на основе группы идентификаторов и даты. Спасибо

Have

ID Name DeptID  Date
1  Junh  junk   19990101
1  John  junk1  19990202
1  JOHN  CLEAN  20200101
2  David junk   19990101
2  John  junk1  19990202
2  DAVID GOOD   20200101

WANT

ID Name DeptID Date        NAME1
1  Junh  junk   19990101   JOHN
1  John  junk1  19990202   JOHN
1  JOHN  CLEAN  20200101   JOHN
2  David junk   19990101   DAVID
2  John  junk1  19990202   DAVID
2  DAVID GOOD   20200101   DAVID

Ответы [ 2 ]

2 голосов
/ 02 мая 2020

Мне нравится ответ Тима, но есть еще один вариант:

SELECT
    t1.ID,
    t1.Name,
    t1.DeptID,
    t1."Date",
    max(t1.name) keep (dense_rank first order by t1."Date" DESC) OVER (partition by t1.ID) as Name1
FROM yourtable t1
ORDER BY
    t1.ID,
    t1."Date"
1 голос
/ 02 мая 2020

Один подход, используя ROW_NUMBER:

WITH cte AS (
    SELECT t.*, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Date DESC) rn
    FROM yourTable t
)

SELECT
    t1.ID,
    t1.Name,
    t1.DeptID,
    t1.Date,
    t2.Name AS NAME1
FROM yourTable t1
INNER JOIN cte t2
    ON t1.ID = t2.ID
WHERE
    t2.rn = 1
ORDER BY
    t1.ID,
    t1.Date;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...