Как выбрать первую дату вступления в силу, если имеется несколько записей с одинаковыми данными? - PullRequest
0 голосов
/ 11 октября 2019

ОБНОВЛЕНО

Ниже приведен сценарий:

EMP |Effective_dt |Должность |Рабочее место |
01 |01.01.2009 |IT SUP |ФИЛИАЛ |
01 |01/06/2019 |IT SUP |HQ |
01 |01/07/2019 |СТАРШИЙ ЭТО |HQ |
01 |12/12/2019 |СТАРШИЙ ЭТО |ФИЛИАЛ |
01 |15/11/2020 |МГР ИТ |ФИЛИАЛ |
02 |01.02.2009 | БУХГАЛТЕР |HQ |

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

Ожидаемый результат:

ID |Effective_dt |Рабочее место |
01 |12/12/2019 |ФИЛИАЛ |
02 |01.02.2009 |HQ |

Я хотел создать таблицу просмотра, чтобы получить самое последнее рабочее место и последнюю дату вступления в силу после изменения рабочего места.

Я не знаком с тем, как искать этоусловие. Пожалуйста, сообщите мне об этом или скажите мне любое ключевое слово для этой ситуации. Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Как вы упомянули сценарий, ваш ожидаемый результат будет неправильным. потому что вы заметили, что 01 |01/07/2019 |СТАРШИЙ ЭТО |HQ | Величайшая дата будет там. в любом случае, я просто попробую в качестве примера и хочу поделиться с вами ..

Таким образом, ваш ожидаемый результат будет:

ID |Effective_dt |Рабочее место |01 |01/07/2019 |HQ |02 |01.02.2009 |HQ |

DECLARE @TEMP AS TABLE 
(
    EMP INT,
    EFFECTIVE_DT DATE,
    POSITION  VARCHAR(20),
    WORKLOCATION  VARCHAR(50) NULL
);

INSERT INTO @TEMP (EMP,EFFECTIVE_DT,POSITION,WORKLOCATION)VALUES
(01 ,'01/01/2019','IT SUP','BRANCH'),
(01 ,'01/06/2019','IT SUP','HQ'),
(01 ,'01/07/2019','IT SUP','HQ'),
(02 ,'01/02/2019','IT SUP','HQ');


SELECT 
DISTINCT(EMP),
MAX(EFFECTIVE_DT) AS EFFECTIVE_DT
INTO #TEMP
FROM @TEMP
GROUP BY EMP

SELECT 
TMP.EMP,
TMP.EFFECTIVE_DT AS Effective_dt,
WORKLOCATION AS Worklocation
FROM #TEMP TMP
INNER JOIN @TEMP TMP1 ON TMP1.EMP = TMP.EMP AND TMP1.EFFECTIVE_DT = TMP.EFFECTIVE_DT 
ORDER BY TMP.Effective_dt DESC

Надеюсь, это поможет вам ..

0 голосов
/ 11 октября 2019

Вы можете достичь этого, используя row_number()

select t1.id, t1.Effective_dt, t1.WorkLocation from 
    (select EMP as id
        , row_number() over (partition by EMP order by Effective_dt desc) as rn
        , WorkLocation 
        , Effective_dt
     from table
     where Effective_dt <= getdate())t1
where t1.rn = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...