Показывать только уникальные значения - PullRequest
1 голос
/ 05 марта 2020

Я использую SQL Server 2019 и ищу способ показать ТОЛЬКО последнее значение для каждого AO C на основе его последней версии FW_Version. Вот мой запрос, который у меня пока есть, но он показывает все:

SELECT DISTINCT
    dbo.Model.ModelName AS AOC,
    dbo.Chipset.Chipset,
    dbo.FormFactor.FormFactor AS Form_Factor,
    dbo.ProductRelease.ECO AS Release,
    dbo.ProductRelease.Date AS Release_Date,
    dbo.Intel.FWVersion AS FW_Version,
    dbo.Intel.ETRACKID
FROM
    dbo.Intel
        INNER JOIN dbo.ProductRelease ON dbo.Intel.ProductReleaseID = dbo.ProductRelease.ID
        INNER JOIN dbo.Model ON dbo.ProductRelease.ModelID = dbo.Model.ID
        INNER JOIN dbo.FormFactor ON dbo.Model.FormFactorID = dbo.FormFactor.ID
        INNER JOIN dbo.Chipset ON dbo.Intel.ControllerID = dbo.Chipset.ControllerID AND dbo.Intel.ChipsetID = dbo.Chipset.ID
ORDER BY 
    dbo.Model.ModelName, 
    dbo.Intel.FWVersion DESC, 
    dbo.ProductRelease.Date DESC

Что бы я хотел показать ТОЛЬКО элементы, отмеченные желтым ... Как я могу это сделать? enter image description here

Вот список моих таблиц, которые объединены на основе их соответствующих идентификаторов

Таблица 1: Модель

ID (Primary Key)
ModelName nvarchar(50)
FormFactorID int

Таблица 2: FormFactor

ID (Primary Key)
FormFactor nvarchar(15)

Таблица 3: ProductRelease

ID (Primary Key)
ModelID int
Date date
ECO nvarchar(10)

Таблица 4: Intel

ID (Primary Key)
ProductReleaseID int
ChipsetID int
FWVersion nvarchar(10)
ETRACKID nvarchar(15)

Таблица 5: Чипсет

ID (Primary Key)
Chipsetnvarchar(20)

1 Ответ

1 голос
/ 05 марта 2020

Один метод использует оконные функции:

SELECT *
FROM (
    SELECT 
        dbo.Model.ModelName AS AOC,
        dbo.Chipset.Chipset,
        dbo.FormFactor.FormFactor AS Form_Factor,
        dbo.ProductRelease.ECO AS Release,
        dbo.ProductRelease.Date AS Release_Date,
        dbo.Intel.FWVersion AS FW_Version,
        dbo.Intel.ETRACKID,
        ROW_NUMBER() OVER(PARTITION BY dbo.Model.ModelName ORDER BY dbo.ProductRelease.Date DESC) rn
    FROM
        dbo.Intel
        INNER JOIN dbo.ProductRelease ON dbo.Intel.ProductReleaseID = dbo.ProductRelease.ID
        INNER JOIN dbo.Model ON dbo.ProductRelease.ModelID = dbo.Model.ID
        INNER JOIN dbo.FormFactor ON dbo.Model.FormFactorID = dbo.FormFactor.ID
        INNER JOIN dbo.Chipset ON dbo.Intel.ControllerID = dbo.Chipset.ControllerID AND dbo.Intel.ChipsetID = dbo.Chipset.ID
) t
WHERE rn = 1
ORDER BY AOC
...