sql - SQL:修改内连接以选择一行
问题描述
我有两个表,A
我B
想在location
. 但是,对于 中的每一行A
,有许多行匹配。我想最终得到与. 具体来说,我想排在最早的位置。这是我到目前为止所拥有的:B
location
A
B
date
SELECT *
FROM A
INNER JOIN B ON A.location = B.location
我将如何修改它以使每一行A
仅与单行连接B
(使用最早的date
)?
试图:
SELECT *
FROM A
INNER JOIN B ON A.location = B.location
AND B.date = (SELECT MIN(date) FROM B)
这是正确的方法吗?
解决方案
您可以使用 ANSI/ISO 标准row_number()
函数:
SELECT *
FROM A INNER JOIN
(SELECT B.*, ROW_NUMBER() OVER (PARTITION BY B.location ORDER BY B.date) as seqnum
FROM B
) B
ON A.location = B.location AND seqnum = 1;
推荐阅读
- scala - 带有小数类型的 spark DataFrame 中的大负十进制值正在四舍五入
- angular - “可观察”类型上不存在属性“地图”
[]>' - r - 使用 data.table,是否可以通过重复组中的第一个 X 值来创建新列
- go - Zap logger 源代码行
- python - 将 IBM Watson 助手与 Python 中的回归模型相关联?
- javascript - Express:如何正确使用路由参数
- firebase - Cloud Functions 中使用的 Firestore where 子句中是否有“!=”运算符?
- internationalization - 如何在 Sphinx 或 gettext 中翻译 po 文件的完整文章
- c# - 将 UI5 与 ASP.Net oData 后端一起使用
- angular - 为什么我的状态的 @Selector() 在一次调用中返回先前和当前数据?