У меня есть таблица со следующей структурой и примерами данных:
id | date | nutrient_number | nutrient_goal_value
---------------------------------------------------------
1 | "2019-01-01" | 1 | 5
2 | "2019-01-05" | 1 | 6
3 | "2019-01-06" | 1 | 7
4 | "2019-01-01" | 2 | 20
5 | "2019-01-05" | 2 | 25
6 | "2019-01-06" | 3 | 10
7 | "2019-01-10" | 3 | 8
Мне нужно получить одну строку для каждого нутриентного числа, поэтому в этом примере мне нужно будет вернуть 3 строки.Я думаю, я бы сгруппировался по нутриенту по номеру.
SELECT * from nutrient_goal_table GROUP BY nutrient_number
Но возвращаемая строка должна быть строкой с максимальной датой до или == датойЯ запрашиваю с (если он существует), и если он не существует, то это должна быть строка с минимальной датой после даты, с которой я запрашиваю.
Я мог бы заставить это работать для одного из условий, например так:
SELECT id, MAX(date), nutrient_number, nutrient_goal_value
FROM nutrient_goal_table
WHERE date <= '2019-01-06'
GROUP BY nutrient_number
Это возвращает:
id | date | nutrient_number | nutrient_goal_value
---------------------------------------------------------
3 | "2019-01-06" | 1 | 7
5 | "2019-01-05" | 2 | 25
6 | "2019-01-06" | 3 | 10
, что хорошо.Однако, если бы мне пришлось выполнить запрос, подобный следующему:
SELECT id, MAX(date), nutrient_number, nutrient_goal_value
FROM nutrient_goal_table
WHERE date <= '2019-01-05'
GROUP BY nutrient_number
Я бы, очевидно, получил только 2 результата, когда мне нужно было бы 3.
id | date | nutrient_number | nutrient_goal_value
---------------------------------------------------------
2 | "2019-01-05" | 1 | 6
5 | "2019-01-05" | 2 | 25
Чтобы получитьВ-третьих, мне понадобится вышеуказанный запрос для выборки ближайшей даты после указанной мной даты, т.е. минимальной даты, превышающей указанную дату, но это следует делать только в том случае, если не существует строк, в которых есть дата <= предоставленная дата. </p>
Набор результатов, который мне нужен, будет выглядеть следующим образом с указанием даты '2019-01-05'
id | date | nutrient_number | nutrient_goal_value
---------------------------------------------------------
2 | "2019-01-05" | 1 | 6
5 | "2019-01-05" | 2 | 25
6 | "2019-01-06" | 3 | 10
Я уже некоторое время ломаю голову, ноЯ не очень опытный, и я изо всех сил пытаюсь найти решение.Кто-нибудь может указать мне правильное направление?