/ / Encontrando a data mais próxima para hoje no Access 2013 - ms-access, ms-access-2013

Encontrando a data mais próxima de hoje no Access 2013 - ms-access, ms-access-2013

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 № 1

Se 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