为给定的文件 ID 选择具有最大 orderID 的记录的详细信息

Selecting the details of records with maximum orderID for a given fileID

对于具有相同文件 ID 的客户,我尝试只select那些具有最大文件 ID 的客户。但是,我不断收到错误消息:

subquery returned more than 1 value.

我试过使用 where 子句进行过滤,但它不起作用。

SELECT orderid, fileid, customername
FROM customer
WHERE orderID = (select max(orderID) from customer 
GROUP BY fileid)

这可以使用简单的 row_numbertop 1 with ties 来解决。

首先,创建并填充示例 table(在您以后的问题中省去这一步)

DECLARE @customer AS TABLE
(
    fileid int, 
    orderid int, 
    customername varchar(20)
);

INSERT INTO @customer (fileid, orderid, customername) VALUES
(1, 1, 'Marshall, John'),
(1, 2, 'Mary, Rose'), -- Shuold be selected
(2, 3, 'Marvis, Emma'),
(2, 4, 'Miller, Ross'), -- Shuold be selected
(4, 1, 'Saraf, Ram'), -- Shuold be selected
(5, 2, 'Miller, Katie'),
(5, 3, 'Miller, Abby'),
(5, 4, 'Wolowiz, Andy'); -- Shuold be selected

查询:

SELECT TOP 1 WITH TIES fileid, orderid, customername
FROM @Customer
ORDER BY ROW_NUMBER() OVER(PARTITION BY fileid ORDER BY orderid DESC)

结果:

fileid  orderid customername
1       2       Mary, Rose
2       4       Miller, Ross
4       1       Saraf, Ram
5       4       Wolowiz, Andy