Дубликаты при объединении 2 таблиц - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть оператор Select с большим количеством данных, более 23 КБ, он объединен с более чем 5 таблицами, одна из которых вызывает дубликаты, когда я смотрю на таблицу, я вижу, что объединение, которое я выполняю, имеет 2 совпадающих строки,

Я пытался создать Группу, но это не сработало, я также пытался выбрать DISTINCT, но это тоже не сработало, как бы я поступил так?

SELECT DISTINCT FirstName, LastName, F.Interview  FROM tbData D
LEFT JOIN tbInterview F on D.UserID = F.UserID
 where CreatedDate is between '' and '' 

Это вернуло Дубликаты, потому что tbInterview имеет более одного Интервью, связывающего USerID, затем я попробовал Это

SELECT DISTINCT FirstName, LastName, F.Interview  FROM tbData D
LEFT JOIN (Select UserID from tbInterview GROUP BY UserID) as InterviewID ON D.UserID = InterviewID.UserID
LEFT JOIN tbInterview F on InterviewID.UserID = F.UserID
 where CreatedDate is between '' and ''

Это тоже не сработало.

Вот пример данных в таблице tbInterview ╔═════════════╤════════╤═════════════╤═════════════════════════════╗ ║ InterViewID │ UserID │ DateCreated │ Interview ║ ╠═════════════╪════════╪═════════════╪═════════════════════════════╣ ║ 1 │ 120 │ 2015/05/10 │ Inter View Done ║ ╟─────────────┼────────┼─────────────┼─────────────────────────────╢ ║ 2 │ 120 │ 2015/05/15 │ 2nd Interview was requested ║ ╚═════════════╧════════╧═════════════╧═════════════════════════════╝

Теперь, когда я делаю Select с Присоединением к tbInterview, он показывает вывод следующим образом: ╔═══════════╤══════════╤═════════════════════════════╗ ║ FirstName │ LastName │ Interview ║ ╠═══════════╪══════════╪═════════════════════════════╣ ║ James │ Smith │ Inter View Done ║ ╟───────────┼──────────┼─────────────────────────────╢ ║ James │ Smith │ 2nd Interview was requested ║ ╚═══════════╧══════════╧═════════════════════════════╝

1 Ответ

0 голосов
/ 22 апреля 2019

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

Это предполагает, что вы на самом деле хотите только информацию, где значение CreatedDate (Предполагается, что находится в таблице tbData, так как DateCreated названкак эквивалент в tbInterview) находится в пределах диапазона, как указано в вашем примере запроса.

SELECT 
    FirstName, 
    LastName, 
    F.Interview
FROM tbData D
LEFT JOIN (
    SELECT 
        UserID,
        CreatedDate,
        ROW_NUMBER() OVER (Partition By UserId ORDER BY DateCreated Desc) as RowNumber
    FROM tbInterview F
    WHERE DateCreated > '' --- Earliest date created for range on tbData
    ) as F
    on D.UserID = F.UserID
WHERE CreatedDate is between '' and '' 
    AND RowNumber = 1

Это свяжет последнюю строку интервью (на основе DateCreated) с пользователем tbData.

...