Eu tenho o seguinte código:
DECLARE @Latest TABLE
(
DomainId bigint,
[date] datetime2
)
DECLARE @Rows int
DECLARE @History int
INSERT INTO @Latest (DomainId, date)
SELECT DomainId, MAX(Date)
FROm DomainDetailDataHistory
GROUP BY DomainId
SELECT @Rows = COUNT(DomainId) FROM @Latest
SET @History = @Rows * 5
SELECT DISTINCT TOP(@History)
c.DomainId
, c.[Date]
, Passed
FROM DomainDetailDataHistory c
JOIN @Latest h ON h.DomainId = c.DomainId
WHERE c.[Date] != h.[Date]
ORDER BY c.Date DESC
Este código me dá a última linha inserida fornecida por Id e as últimas 5 inserções.
Problema:
Isso funciona bem quando tenho 5 inserções de cada arquivo DomainId
. Tentei adicionar um novo e, como o novo não tinha nenhuma inserção anterior, o código me deu as 7 principais inserções para compensar o domínio extra.
Clareza:
@History
me dá quantos domínios diferentes eu tenho. Eu multiplico isso por 5 para obter 5 de cada.
O problema é quando um dos domínios não tem 5 inserções, digamos que só tem uma então eu consigo mais que os 5 primeiros dos outros domínios.
Como posso ter certeza de que sempre recebo apenas 5 de cada e NÃO MAIS?
Você já pensou em usar um Cross Apply? Isso deve funcionar para você, mas não consegui testar se não há dados em sua amostra. Para cada domínio no @Latest, ele fornece os últimos 5 resultados da tabela domainDetailDataHistory.