Получить последнюю регистрацию по коду (без повторения) в Sql Server

У меня есть следующий запрос

select distinct S.Semana, V.Codigo, Max(V.Fecha) as Fecha 
FROM Visitas V 
left join CSemanas S ON V.Fecha between S.Inicio and S.Fin 
group by S.Semana, V.Codigo

, который дает мне следующий результат

introducir la descripción de la imagen aquí

Что теперь Мне нужно показать последнюю запись по коду самой последней даты, то есть я не хочу, чтобы коды повторялись. Например, как видно, код 01743 повторяется, и 02834 из них просто хотят самую последнюю запись.

introducir la descripción de la imagen aquí

1
задан 30.11.2019, 21:59
1 ответ

Ты можешь получать результат, который ты хочешь используя ROW_NUMBER (), чтобы нумеровать линии и позже выбирать одни в частности.

я использовал следующие данные, чтобы симулировать результат твоей консультации:

create table t (Semana int, Codigo int, Fecha date);
insert into t values
(01, 100, '20190101'),
(02, 100, '20190108'),
(01, 200, '20190101'),
(02, 200, '20190108');

Достаточен использовать твой query в консультации CTE или как sub-query и выбирать реестры с row_number = 1.

with ct as
(
select distinct 
    Semana, Codigo, Fecha,
    row_number() over (partition by Codigo order by Fecha desc) rn
from
    t
)
select
    Semana, Codigo, Fecha
from
    ct
where
   rn = 1;

Восток - результат:

Semana | Codigo | Fecha              
-----: | -----: | :------------------
     2 |    100 | 08/01/2019 00:00:00
     2 |    200 | 08/01/2019 00:00:00

db<> fiddle here

1
ответ дан 01.12.2019, 10:30

Теги

Похожие вопросы