我想将表用户与Firma结合起来
表dbo.User
Id Server Database BiEnable BiPerm
1 5 TEST 1 NULL
表dbo.Firma
FId FKod FAktywna FInst
1 TEST 0 3
2 TEST 0 4
4 TEST 1 5
必须通过[用户]表格中的[数据库]字段和[Firma]表格中的[Fkod]字段进行链接,但仅限于[Fid]总是最大的行(我们有一些情况)同名)。 这个查询应该怎么样?
@edit: 预期结果:
Id Server Database BiEnable BiPerm FId FKod FAktywna FInst
1 5 TEST 1 NULL 4 TEST 1 5
答案 0 :(得分:2)
你可以试试这个(我认为如果可能的话,避免在表中使用USER和DATABASE等名称或其他保留的MSSQL单词是一个好习惯):
SELECT A.*, B.*
FROM [USER] A
INNER JOIN FIRMA B ON A.[DATABASE] = B.FKOD
INNER JOIN (SELECT FKOD, MAX(FID) AS MAXFID FROM FIRMA GROUP BY FKOD) C ON A.[DATABASE] = C.FKOD AND C.MAXFID =B.FID
如果您可以使用Windows分析功能:
SELECT A.*, B.*
FROM [USER] A
INNER JOIN (SELECT *, ROW_NUMBER() OVER (PARTITION BY FKOD ORDER BY FID DESC) AS RN FROM FIRMA) B ON A.DATABASE = B.FKOD AND B.RN = 1
答案 1 :(得分:1)
这将为每个FId
FKod
select FKod, max(FId)
from Firma
group by FKod
然后,您可以通过将其与两个原始表
连接来将其用作过滤器select *
from User t1
join Firma t2
on t1.Database = t2.FKod
join (
select FKod, max(FId) FId
from Firma
group by FKod
) t3
on t2.FId = t3.FId and
t2.FKod = t3.FKod
答案 2 :(得分:0)
与@ etsa的查询基本相同,使用WITH TIES
简化SELECT A.*, B.*
FROM [USER] A
INNER JOIN (
SELECT TOP(1) WITH TIES *
FROM FIRMA
ORDER BY ROW_NUMBER() OVER (PARTITION BY FKOD ORDER BY FID DESC)
) B ON A.DATABASE = B.FKOD