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

如何用单条SQL语句获取最新记录的10个唯一Status值?

获取最近10个不同Status的单条SQL解决方案

你最初的SQL报错是因为SQL Server的规则:使用SELECT DISTINCT时,ORDER BY子句中的列必须出现在选择列表中。但你不需要返回OrderId,所以得换一种思路实现需求——直接获取最近出现的10个不同Status值,可以用以下两种单条SQL完成:

方法一:GROUP BY + MAX(OrderId)(最简洁)

利用GROUP BY对Status去重,同时通过MAX(OrderId)获取每个Status对应的最新订单ID(假设OrderId是自增的,数值越大订单越新),最后按这个最新ID倒序取前10个:

SELECT TOP 10 [Status]
FROM [Orders]
GROUP BY [Status]
ORDER BY MAX([OrderId]) DESC;

方法二:窗口函数分组去重

用ROW_NUMBER()窗口函数按Status分组,每个组内按OrderId降序排序,只保留每个组的第一条(即该Status的最新记录),再按最新订单ID倒序取前10:

SELECT TOP 10 [Status]
FROM (
    SELECT 
        [Status],
        ROW_NUMBER() OVER (PARTITION BY [Status] ORDER BY [OrderId] DESC) AS rn
    FROM [Orders]
) AS temp
WHERE rn = 1
ORDER BY (SELECT MAX(OrderId) FROM [Orders] o WHERE o.Status = temp.Status) DESC;

这两种方法都不需要像之前那样调整TOP值试错,能直接准确得到你需要的10个不同Status结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:35:08