You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无日期字段下,如何获取关联子表Table2的最后插入记录及状态?

获取每个箱子的最新状态

问题背景

现有两张主键为uniqueidentifier类型且无日期字段的表:

  • Table1:存储箱子编号等基础信息
  • Table2:用于箱子状态的历史追踪,每次状态变更新增一行记录,通过Table1_FK_ID与Table1关联
    状态值含义:0-新建、10-已批准、20-已拒绝、30-已锁定

需求:查询每个箱子对应的Table2中最后插入记录的状态,结果集需包含BoxNum和Status字段。

表结构

Table1

列名数据类型
Iduniqueidentifier
BoxNumnvarchar(25)

Table2

列名数据类型
Iduniqueidentifier
statusint
Table1_FK_IDuniqueidentifier

解决方案

由于无日期字段,我们依赖Table2.Id(主键,若为NEWSEQUENTIALID()生成,其值递增顺序与插入顺序一致)来判断最后插入的记录。

方案1:窗口函数ROW_NUMBER()

SELECT t1.BoxNum, t2.Status
FROM Table1 t1
LEFT JOIN (
    SELECT 
        Table1_FK_ID,
        status AS Status,
        ROW_NUMBER() OVER (PARTITION BY Table1_FK_ID ORDER BY Id DESC) AS rn
    FROM Table2
) t2 ON t1.Id = t2.Table1_FK_ID AND t2.rn = 1
  • 按Table1_FK_ID分组,对每组内的记录按Id降序排序,rn=1即为该箱子的最新状态记录
  • 使用LEFT JOIN可保留无状态记录的箱子(此时Status为NULL),若只需有状态的箱子,替换为INNER JOIN即可

方案2:关联子查询

SELECT 
    t1.BoxNum,
    (SELECT TOP 1 status FROM Table2 t2 WHERE t2.Table1_FK_ID = t1.Id ORDER BY t2.Id DESC) AS Status
FROM Table1 t1
  • 针对每个箱子,子查询返回Table2中对应Id最大的记录的状态
  • 无状态记录的箱子,Status字段将返回NULL

示例输出

BoxNumStatus
44444410
44444520
44441230

内容的提问来源于stack exchange,提问作者Danijel Boksan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 17:16:28