为给定的文件 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_number
和 top 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
对于具有相同文件 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_number
和 top 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