您会注意到有3组行;只有 createdAt ,状态列不同。我想从每个组中获取“最新”记录,即突出显示的行,PK = {3,6,9}。
这可以用一个SQL语句完成吗? (方言是Microsoft SQL Server)
答案 0 :(得分:0)
使用row_number功能
;with cte
as
(
select
SeqNo = ROW_NUMBER() OVER(PARTITION BY RefDocNo ORDER BY CreateAt DESC),
*
FROM YourTable
)
SELECT
*
FROM cte
WHERE SeqNo = 1
此功能称为公用表表达式 - CTE。它的工作原理就像子查询一样,除了你可以在同一个内部递归调用cte。但没有必要将其命名为cte,而是可以给它任意名称
答案 1 :(得分:-1)
您在MS SQLSERVER中有TOP命令,因此可以执行
SELECT * FROM (
SELECT TOP 1 * FROM Table WHERE your_where_clauses
order by your-order-field ASC (DESC IF YOU WANT LAST RECORDS)
)
即使用其他方法回答问题,您也可以使用TOP命令获得预期的结果。
希望这有帮助