как вывести из базы данных строки которые ближе всего к сегоднешей дате

Есть база данный со следующими записями

ID          ITEM      LOCATION  DATE        VALUE  
16711663545 067771960   2002    01.01.2018  12.5000
1684043432  067771960   2002    30.11.2017  10.7000
1684039121  050374500   2002    01.02.2017  3.2500
1684039321  050374500   2002    02.05.2017  3.3300
1684039371  050374500   2002    07.07.2017  3.8900
1684043441  050374500   2002    03.01.2017  4.3400
1684043395  067771960   2006    01.01.2018  12.5000
11727914496 067771960   2006    30.11.2017  10.7000
1684013435  050374500   2006    01.02.2017  3.2500
1684014435  050374500   2006    02.05.2017  3.3300
1684054435  050374500   2006    07.07.2017  3.8900
1684014215  050374500   2006    03.01.2017  4.3400

как вывести строки с уникальными полями ITEM LOCATION где DATA самая ближайшая к сегодня

вывод должен быть следующий

ID          ITEM      LOCATION  DATE        VALUE  
16711663545 067771960   2002    01.01.2018  12.5000
1684039371  050374500   2002    07.07.2017  3.8900
1684043395  067771960   2006    01.01.2018  12.5000
1684054435  050374500   2006    07.07.2017  3.8900

я пробовал

SELECT ID,ITEM, LOCATION, MAX(DATE) AS data,VALUE FROM TABLE GROUP BY ITEM,LOCATION;

но вывод не корректны

1684039371  050374500   2002    07.07.2017  3.8900
1684043432  067771960   2002    30.11.2017  10.7000
1684054435  050374500   2006    07.07.2017  3.8900
11727914496 067771960   2006    30.11.2017  10.7000

Ответы (1 шт):

Автор решения: Akina
WITH cte AS 
( SELECT *,
  ROW_NUMBER() OVER (PARTITION BY item, location ORDER BY `date` DESC) rn
  FROM test
)
SELECT id, item, location, `date`, `value`
FROM cte
WHERE rn = 1;

или

SELECT DISTINCT
FIRST_VALUE(id) OVER (PARTITION BY item, location ORDER BY `date` DESC) id,
item,
location,
MAX(`date`) OVER (PARTITION BY item, location) `date`,
FIRST_VALUE(`value`) OVER (PARTITION BY item, location ORDER BY `date` DESC) `value`
FROM test;

fiddle

Если есть записи в будущем, добавить WHERE `date` <= CURRENT_DATE.

Если date хранится в строковом поле (что странно - хотя откуда такой формат?) - использовать явный CAST в тип DATE.

→ Ссылка