Minha consulta retorna resultados semelhantes a este.
id date
510010 12/09/2013
510010 10/09/2013
510010 05/09/2013
510010 14/09/2013
510012 14/09/2013
510012 10/09/2013
Existe uma maneira de fazer minha consulta selecionar apenas a data mais próxima de hoje para cada id distinto?
Resultado esperado.
510010 12/09/2013
510010 10/09/2013
510012 10/09/2013
Obrigado, Chris
Respostas:
0 para resposta № 1Se você tiver uma tabela chamada [YourTable] com os dados ...
id date
------ ----------
510010 2013-09-12
510010 2013-09-10
510010 2013-09-05
510010 2013-09-14
510012 2013-09-14
510012 2013-09-10
... então você pode criar uma consulta salva chamada [CalculateDaysAway] no Access ...
SELECT
[id],
[date],
Abs(DateDiff("d", [date], Date()) AS DaysAway
FROM YourTable
... que (quando executado em 11/09/2013) retorna
id date DaysAway
------ ---------- --------
510010 2013-09-12 1
510010 2013-09-10 1
510010 2013-09-05 6
510010 2013-09-14 3
510012 2013-09-14 3
510012 2013-09-10 1
Agora você pode usar essa consulta como base para retornar a (s) data (s) mais próxima (s) ...
SELECT
CalculateDaysAway.[id],
CalculateDaysAway.[date]
FROM
CalculateDaysAway
INNER JOIN
(
SELECT
[id],
MIN(DaysAway) AS MinOfDaysAway
FROM CalculateDaysAway
GROUP BY [id]
) AS MinDays
ON CalculateDaysAway.[id] = MinDays.[id]
AND CalculateDaysAway.DaysAway = MinDays.MinOfDaysAway
... que (quando executado em 11/09/2013) retorna
id date
------ ----------
510010 2013-09-12
510010 2013-09-10
510012 2013-09-10