DECLARE @DUMMY TABLE
(
Product VARCHAR(6) ,
ID INT
);
INSERT INTO @DUMMY (Product, ID)
VALUES ('Orange', 1),
('Orange', 2),
('Orange', 3),
('Orange', 4),
('Apple', 5),
('Apple', 6),
('Apple', 7),
('Grapes', 8),
('Grapes', 9);
WITH dummy
AS (
SELECT [Product], [ID],
ROW_NUMBER() OVER (PARTITION BY Product ORDER BY ID) AS rn
FROM @DUMMY AS [d]
)
SELECT [d1].[Product], [d1].[ID], [d2].[ID]
FROM dummy AS [d1]
LEFT JOIN dummy AS [d2] ON [d2].[Product] = [d1].[Product] AND
[d2].[rn] + 1 = [d1].[rn]
ORDER BY d1.[ID];
PS:如果是2012或更高版本,然后它像PostgreSQL一样支持ROWS/RANGE。 PS2:您可以使用SQLFiddle将示例数据作为代码而不是纯文本。
我也想要。你试过什么了? – lad2025
我使用了MIN([Id)OVER(PARTITION BY Description)),但这只是获取每个组中的第一行。 – ohhzumm
由于LAG在提及的版本中不可用,因此您必须找到解决方法。提示:以前的ID是所有较小ID的最高ID。如果ID没有间隔,那么你甚至可以从每个ID中减去一个,除了每个产品的最小ID之外。 –