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

MSSQL新手求助:如何按日期时间从两表获取指定环境的最新记录

解决MSSQL筛选特定环境下每个Code的最新记录需求

嘿,作为MSSQL新手,这个需求其实挺常见的,我来帮你一步步搞定~

需求明确

你需要:

  • 筛选出test环境下每个code对应的最新(日期时间最晚)记录
  • 关联表1获取code对应的显示名称name
  • 按指定格式输出结果

实现SQL代码

假设你的表1名为CodeNames,表2名为ResultHistory(如果实际表名不同,记得替换):

WITH RankedResults AS (
    SELECT 
        t2.code,
        t2.result,
        t2.environment,
        t2.date,
        t2.time,
        -- 按code分组,每组内按日期时间倒序排名,最新记录排第1
        ROW_NUMBER() OVER (PARTITION BY t2.code ORDER BY t2.date DESC, t2.time DESC) AS rn
    FROM 表2 t2
    WHERE t2.environment = 'test' -- 替换成你需要的目标环境
)
SELECT 
    rr.code,
    t1.name,
    rr.result,
    rr.date,
    rr.time
FROM RankedResults rr
INNER JOIN 表1 t1 ON rr.code = t1.code
WHERE rr.rn = 1 -- 仅保留每个code的最新记录
ORDER BY rr.code; -- 按code排序,和示例输出一致

代码说明

  1. CTE分组排名:用RankedResults这个公共表表达式,给表2的记录按code分组,每组内按date和time倒序排序,最新的记录会被标记为rn=1。
  2. 关联表获取名称:通过INNER JOIN关联表1,把code对应的name带出来。
  3. 筛选最新记录:通过WHERE rr.rn = 1只保留每个code的最新一条记录。

注意事项

如果你的date和time是字符串类型(而非datetime类型),直接按字符串排序可能会出错(比如16/08/2019和12/08/2019字符串排序会优先比较第一个数字),这时候可以把日期时间合并后转换成datetime类型再排序:

-- 修改ORDER BY部分
ORDER BY CONVERT(DATETIME, t2.date + ' ' + t2.time, 103) DESC

这里的103是MSSQL中对应DD/MM/YYYY格式的转换代码,如果你的日期格式不同,需要调整对应的格式代码。

内容的提问来源于stack exchange,提问作者Saranya Senthil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:59:41