[英]Don't show repeated results in SQL query using INNER JOIN
這是我當前的查詢:
SELECT e.*, j.application_date
FROM employee e JOIN job_application j ON e.Id=j.employeeId
WHERE j.status IN ('test1', 'test2')
ORDER BY j.application_date DESC
我正在對兩個表進行 JOIN,但我不需要使用 e.Id 作為列來顯示重復數據來過濾重復項。
此外,它必須按 j.application_date 列排序才能接收最新的
更新 1
我在SELECT
后面使用了DISTINCT
標簽,但它不起作用,因為行不完全相同,這就是它不起作用的原因。
考慮到單個列(e.Id 或 j.employeeId),我不知道如何讓它給我唯一的行
更新 2
如果我有這兩個表:
員工表
Id | FirstName | LastName | YearOfBirth
--------------------------------------------------------
0 | Thomas | Smith | 1977
1 | Peter | Edison | 1969
2 | Albon | Boeraner | 1995
3 | Mary | Caters | 1982
工作申請表
Id | employeeId | application_date | address | status
---------------------------------------------------------------------
0 | 1 | 2018-05-14 | address 1 | test1
1 | 1 | 2018-02-19 | address 2 | test3
2 | 1 | 2019-08-27 | address 3 | test2
3 | 3 | 2019-11-16 | address 4 | test1
我只需要為 employee = 1 顯示 application_date = 2019-08-27 的行,並丟棄另一個 (application_date = 2018-05-14)
使用這個:
select e2.* , T2.Mapplication_date
from (select e.Id, max(j.application_date ) as Mapplication_date
FROM employee e JOIN job_application j ON e.Id=j.employeeId
group by e.Id ) as T2
JOIN employee e2 ON e2.Id= T2.Id
您可以使用apply
:
SELECT e.*, j.application_date
FROM employee e CROSS APPLY
(SELECT TOP (1) j.*
FROM job_application j
WHERE j.employeeId = e.id AND
j.status IN ('test1', 'test2')
ORDER BY j.application_date DESC
) j;
您只查找一列,因此相關子查詢也可以:
SELECT e.*,
(SELECT TOP (1) j.application_date
FROM job_application j
WHERE j.employeeId = e.id AND
j.status IN ('test1', 'test2')
ORDER BY j.application_date DESC
) as application_date
FROM employee e;
如果您願意,使用apply
的版本允許您返回更多列。 而且,這個版本還會返回所有員工,而不僅僅是那些匹配的員工。
使用 CTE 使用 row_number 按日期為員工的每個申請編號。 所以你可以加入最后一個應用程序(數字= 1)
with last_application as (
select employeeId, application_date,
row_number() over (partition by employeeId order by application_date desc) as num
from job_application
where status IN ('test1', 'test2')
)
select e.*, j.application_date
from employee
inner join last_application j on j.employee_id = e.Id and j.num = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.