[英]How to apply max function in a SQL join
我是 SQL 查询的新手,有人能帮我解决这个问题吗,我下面有两个表,需要连接这些表的位置,这样假设我在同一天同时拥有两个 Etype,则优先选择 Etype B 而不是 A,如果没有B则只取A
表格1
ID | 地点 |
---|---|
1个 | 美国 |
2个 | 英国 |
表2
地点 | 日期 | E型 |
---|---|---|
美国 | 2021-01-01 | 一种 |
美国 | 2021-01-01 | 乙 |
英国 | 2021-02-03 | 乙 |
预期结果如下:
ID | 地点 | 日期 | E型 |
---|---|---|---|
1个 | 美国 | 2021-01-01 | 乙 |
2个 | 英国 | 2021-02-03 | 乙 |
您可以使用一个简单的聚合,假设您只有两种类型A
和B
用于 Etype
SELECT t1.id, t2.location, t2.date, MAX(t2.Etype)
FROM [table1] AS t1
JOIN [table2] AS t2
ON t2.location = t1.location
GROUP BY t2.id, t2.location, t2.date
如果您需要消除联系,或者有两个以上的Etypes
,或者它们在现实生活中实际上不是按字母顺序排列的,或者您有其他您没有提到的列,您不能或不想聚合:
;WITH loc AS
(
SELECT location, date, Etype,
rn = ROW_NUMBER() OVER (PARTITION BY location, date
ORDER BY CASE Etype WHEN 'B' THEN 1
WHEN 'A' THEN 2
-- other conditions
END)
FROM dbo.table2
)
SELECT t1.Id, t1.location, loc.date, loc.Etype
FROM loc
INNER JOIN dbo.table1 AS t1
ON loc.location = t1.location
AND loc.rn = 1;
SELECT T.ID,T.LOCATION,X.DATE,MAX(ETYPE)MAX_ETYPE
FROM TABLE_1 AS T
JOIN TABLE_2 AS X ON T.LOCATION=X.LOCATION
GROUP BY T.ID,T.LOCATION,X.DATE
你能试试上面的吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.