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之外。 –