sql - 如何加入 2 个表并仅保留最新记录
问题描述
我有 2 张桌子要加入。一个表是库存的历史记录,它具有与每个“件”库存相关联的“最后更新”日期。另一张桌子上有每件的价格。我想加入表格,以便获得每个价格的历史记录。例如。
TABLE 1
Date Item Location QTY
06/01/2020 ABC 123 10
06/01/2020 DEF 234 12
06/02/2020 ABC 345 13
06/06/2020 ABC 123 10
TABLE 2
ITEM Price
ABC 34.5
DEF 52.12
-----------------> result table ------------------>
Date Item Location QTY Price
06/01/2020 DEF 234 12 34.5
06/02/2020 ABC 345 13 52.12
06/06/2020 ABC 123 10 34.5
结果表在哪里过滤,以便它只保留最近的记录。例如。TABLE1 每分钟更新一次以显示新的库存水平。项目 + 位置组合是“唯一的”,因为 table1 处于项目/位置粒度级别。但是,随着表的更新和创建新条目,可以有许多相同的项目/位置组合(它是一个历史表,因此具有相同项目 + 位置组合的旧条目保留在表中)。有时日期不同,有时日期是同一天。
我写来尝试这样做的查询是:
SELECT DISTINCT
TB1.DATE
,TB1.ITEM
,TB1.LOCATION
,TB1.QTY
,TB2.ITEM_COST
FROM
(
SCHEMA_1.TABLE1 AS TB1
JOIN SCHEMA_1.TABLE2 AS TB2
ON TB1.ITEM = TB2.ITEM
JOIN (
SELECT ITEM AS ITM,
LOCATION AS LOC,
MAX(DATE) AS MAXDATE
FROM SCHEMA_1.TABLE1
GROUP BY ITEM, LOCATION
)TB3
ON TB1.ITEM = TB3.ITM AND TB1.LOCATION= TB3.LOC AND TB1.DATE= TB3.MAXDATE
)
这个查询确实执行了,但它给了我重复,并且绝对不会只过滤最近的记录。不知道我在这里做错了什么。
解决方案
好的旧子选择也应该工作。假设 unqiqe 日期每个项目,位置对。
SELECT T1.* , T2.price
FROM SCHEMA_1.TABLE1 AS TB1
JOIN SCHEMA_1.TABLE2 AS TB2 ON TB1.Item = TB2.Item
WHERE Date = (SELECT MAX(Date) FROM SCHEMA_1.TABLE1 AS TB3
WHERE TB1.Item = TB3.Item
AND TB1.Location = TB3.Location)
推荐阅读
- javascript - 将数组的总和转换为变量
- java - 休眠异常缺少信息:非法尝试将集合与两个打开的会话相关联
- vue.js - vuejs 路由器在 beforeEach 中重定向
- python - 当我在centos中使用xvfb库运行selinium python(robotframework)无头模式时如何捕获屏幕截图
- python - 在字典数组中分组 csv 数据 - Python
- javascript - 在 Chart.JS 中插入数组
- hadoop - 使用s3a遇到的困难
- javascript - 如何在javascript中进行睡眠或完全暂停
- json - Parsing JSON response in React to State
- mongodb - Mongodb Schema 个人笔记