繁体   English   中英

使用SQL JOIN,如何将一张表的结果限制为最近的记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM