У меня есть таблица продуктов, и мне нужно извлечь из каждого idproduct последние 3 уникальные записи IDFornecedor, ie
image1
Результат: image2
Код:
WITH x AS (SELECT dbo.ItensDocumentos.Referencia, dbo.Documentos.Data, dbo.FacturasFornecedor.IDFornecedor, dbo.ItensDocumentos.IDProduto, dbo.Fornecedores.Nome, dbo.Documentos.BaseIncidenciaIva,
dbo.ItensDocumentos.Quantidade, dbo.ItensDocumentos.TotalIliquido / dbo.ItensDocumentos.Quantidade AS Valor
FROM dbo.ItensDocumentos INNER JOIN
dbo.Documentos ON dbo.ItensDocumentos.IDDocumento = dbo.Documentos.IDDocumento INNER JOIN
dbo.FacturasFornecedor ON dbo.Documentos.IDDocumento = dbo.FacturasFornecedor.IDDocumento INNER JOIN
dbo.Fornecedores ON dbo.FacturasFornecedor.IDFornecedor = dbo.Fornecedores.IDFornecedor
WHERE (dbo.ItensDocumentos.TotalIliquido / dbo.ItensDocumentos.Quantidade <> 0) AND dbo.Fornecedores.IDFornecedor<> 2 ),
Y AS (SELECT * FROM X),
Z AS (SELECT IDProduto,Data,Valor,IDFornecedor,Referencia,Nome,ROW_NUMBER() OVER (PARTITION BY IDProduto ORDER BY MAX(Data) DESC) AS Seq
from y
GROUP BY IDProduto,Data,Valor,IDFornecedor,Referencia,Nome)
SELECT IDProduto,Data,Valor,IDFornecedor,Referencia,Nome,Seq,PorDefeito = 0,PrazoREposicao = 0 from z WHERE Seq <= 3 order by Referencia asc