[英]With SQL JOIN, how to limit the results of one table to most recent record
我正在尝试使用连接的 select sql 语句,但无法将结果集限制为我想要的。
这是两张表
资产
帐户ID | 姓名 | 积极的 |
---|---|---|
99492 | 12204 | 真的 |
99492 | 12205 | 真的 |
99492 | 12206 | 错误的 |
99492 | 12207 | 真的 |
设备状态
帐户ID | 资产名称 | LANDMARK_NAME | 活动日期 |
---|---|---|---|
99492 | 12204 | 仓库 1 | 2021-06-11 11:04:23 AM |
99492 | 12204 | 仓库 1 | 2021-06-11 10:54:38 |
99492 | 12204 | 仓库 1 | 2021-06-11 11:07:13 AM |
99492 | 12205 | 仓库 3 | 2021-06-11 09:08:27 |
99492 | 12205 | 仓库 3 | 2021-06-11 下午 12:05:29 |
99492 | 12206 | 仓库 5 | 2021-06-11 08:23:56 PM |
99492 | 12207 | 仓库 9 | 2021-06-11 下午 4:47:12 |
我想要实现的是对于 ACTIVE=TRUE 的 ASSET 中的每个结果,我想要来自 DEVICE_STATE 的最新 EVENT_DATE。 在此示例数据中,结果将是
帐户ID | 资产名称 | LANDMARK_NAME | 活动日期 |
---|---|---|---|
99492 | 12204 | 仓库 1 | 2021-06-11 11:07:13 AM |
99492 | 12205 | 仓库 3 | 2021-06-11 下午 12:05:29 |
99492 | 12207 | 仓库 9 | 2021-06-11 下午 4:47:12 |
我在这里搜索了很多答案并尝试了几个不同的查询-最近一个
select
A.NAME, d.LANDMARK_NAME, d.LANDMARK_ON_START
from ASSET a
JOIN ( select d.*, ROW_NUMBER()
OVER (PARTITION BY ASSET_NAME ORDER BY EVENT_DATE DESC) AS seqnum
FROM DEVICE_STATE d
) d ON a.ACCOUNT_ID = 99492
AND a.ACTIVE = 'TRUE'
AND d.ASSET_NAME = a.NAME
AND seqnum = 1
虽然这段代码不会引发任何错误,但它会永远执行下去,这让我相信它不仅仅是选择最近的 EVENT_DATE(每个 ASSET_NAME 可能有成千上万个),而是试图处理所有这些。
是否对此代码进行了调整以解决该问题,或者是否有完全不同的方法来完成此操作? 谢谢您的帮助。
SELECT r1.ACCOUNT_ID,r1.ASSET_NAME,r1.LANDMARK_NAME,MAX(r1.EVENT_DATE) AS EVENT_DATE
FROM DEVICE_STATE r1
JOIN ASSET r2 ON t1.ASSET_NAME=r2.name
WHERE r2.active
GROUP BY ACCOUNT_ID,ASSET_NAME,LANDMARK_NAME
假设 ASSET.NAME 字段在 ASSET 表中是唯一的,否则您必须在 JOIN 中添加 ACCOUNT_ID。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.