Я пробовал несколько решений, найденных на вашем сайте, и ничего совсем не совпадают с тем, что мне нужно. В SQL Server мне нужно сделать множественное соединение таблицы с помощью запроса GROUP BY
и вернуть только строку TOP 1
из каждой группы. Вот базовый код, который возвращает нужные записи, но возвращает все записи, соответствующие критерии:Возврат TOP n строк из GROUP По запросу с INNER Соединения из нескольких таблиц
SELECT MIN(Maintenance_Log.Log_StartDate) As MaintDate
, Manufacturer.Manufacturer_Name
, GL_Inventory.Inventory_Model
, GL_Inventory.Inventory_SerialNr
, Maintenance_Log.Event_ID
, Maintenance_Log.Inventory_ID
FROM Maintenance_Log
INNER JOIN GL_Inventory ON Maintenance_Log.Inventory_ID = GL_Inventory.Inventory_ID
INNER JOIN Manufacturer ON GL_Inventory.Manufacturer_ID = Manufacturer.Manufacturer_ID
WHERE Maintenance_Log.Owner_ID = @OwnerID
AND Maintenance_Log.Log_CompletedDate Is Null
GROUP BY Maintenance_Log.Inventory_ID
, Maintenance_Log.Log_StartDate
, Manufacturer.Manufacturer_Name
, GL_Inventory.Inventory_Model
, GL_Inventory.Inventory_SerialNr
, Maintenance_Log.Event_ID
возвращаемых результатов являются:
2016-06-30 09:00:00.000 GLOCK G19 Gen 4 ABDE1234 2 6
2016-07-28 09:00:00.000 GLOCK G19 Gen 4 ABDE1234 3 6
2016-08-25 09:00:00.000 GLOCK G19 Gen 4 ABDE1234 4 6
2016-09-29 09:00:00.000 GLOCK G19 Gen 4 ABDE1234 5 6
2016-10-27 09:00:00.000 GLOCK G19 Gen 4 ABDE1234 6 6
2016-11-24 09:00:00.000 GLOCK G19 Gen 4 ABDE1234 7 6
2016-12-29 09:00:00.000 GLOCK G19 Gen 4 ABDE1234 8 6
2016-07-01 09:00:00.000 S&W 642 WQ32De45 9 7
2016-08-05 09:00:00.000 S&W 642 WQ32De45 10 7
2016-09-02 09:00:00.000 S&W 642 WQ32De45 11 7
2016-10-07 09:00:00.000 S&W 642 WQ32De45 12 7
2016-11-04 09:00:00.000 S&W 642 WQ32De45 13 7
2016-12-02 09:00:00.000 S&W 642 WQ32De45 14 7
Я хочу вернуть только TOP 1 строку из каждой группы на основе последней цифры в строке, которая представляет собой номер Inventory_ID
, а не все строки, соответствующие критериям.
Последняя последняя цифра повторяет – Paparazzi