如何将 select top 1 插入到我的查询中?
How to insert select top 1 into my query?
我有一个tableCandidates
。每个候选人都有一个经理。每个候选人的状态从 1 到 11,存储在 table CandidatesStatusesLog
中。我需要了解每个经理的每个状态有多少。下面的查询为每个候选人重新调整从 1 到 11 的所有状态,但我只需要获得最后一个。
SELECT COUNT(c.candidateId) as resumesCount,
csl.[statusId],
s.[managerINN]
FROM sm.Candidates c
INNER JOIN sm.CandidateVacancies cv on c.[candidateId] = cv.[candidateId]
INNER JOIN sm.Staff s on s.[staffId] = cv.[vacancyId]
INNER JOIN sm.CandidatesStatusesLog csl on c.[candidateId] = csl.[candidateId]
GROUP BY csl.[statusId], s.[managerINN]
我需要以某种方式使用下面的查询,但我不知道如何:
select top 1 * from sm.CandidatesStatusesLog
order by logStatusId desc
TableCandidatesStatusesLog
。这里对于候选人 58 我只需要获得值 7,而不是同时获得 5 和 7。
一个简单的选项使用 row_number()
:
SELECT COUNT(*) as resumesCount, csl.[statusId], s.[managerINN]
FROM sm.Candidates c
INNER JOIN sm.CandidateVacancies cv on c.[candidateId] = cv.[candidateId]
INNER JOIN sm.Staff s on s.[staffId] = cv.[vacancyId]
INNER JOIN (
SELECT csl.*, ROW_NUMBER() OVER(PARTITION BY [candidateId] ORDER BY logStatusId DESC) as rn
FROM sm.CandidatesStatusesLog csl
) csl on c.[candidateId] = csl.[candidateId]
WHERE cs1.rn = 1
GROUP BY csl.[statusId], s.[managerINN]
我有一个tableCandidates
。每个候选人都有一个经理。每个候选人的状态从 1 到 11,存储在 table CandidatesStatusesLog
中。我需要了解每个经理的每个状态有多少。下面的查询为每个候选人重新调整从 1 到 11 的所有状态,但我只需要获得最后一个。
SELECT COUNT(c.candidateId) as resumesCount,
csl.[statusId],
s.[managerINN]
FROM sm.Candidates c
INNER JOIN sm.CandidateVacancies cv on c.[candidateId] = cv.[candidateId]
INNER JOIN sm.Staff s on s.[staffId] = cv.[vacancyId]
INNER JOIN sm.CandidatesStatusesLog csl on c.[candidateId] = csl.[candidateId]
GROUP BY csl.[statusId], s.[managerINN]
我需要以某种方式使用下面的查询,但我不知道如何:
select top 1 * from sm.CandidatesStatusesLog
order by logStatusId desc
TableCandidatesStatusesLog
。这里对于候选人 58 我只需要获得值 7,而不是同时获得 5 和 7。
一个简单的选项使用 row_number()
:
SELECT COUNT(*) as resumesCount, csl.[statusId], s.[managerINN]
FROM sm.Candidates c
INNER JOIN sm.CandidateVacancies cv on c.[candidateId] = cv.[candidateId]
INNER JOIN sm.Staff s on s.[staffId] = cv.[vacancyId]
INNER JOIN (
SELECT csl.*, ROW_NUMBER() OVER(PARTITION BY [candidateId] ORDER BY logStatusId DESC) as rn
FROM sm.CandidatesStatusesLog csl
) csl on c.[candidateId] = csl.[candidateId]
WHERE cs1.rn = 1
GROUP BY csl.[statusId], s.[managerINN]