У меня есть таблица под названием "graph" с идентификаторами полей, датой, значением.
Этот запрос (dateStart и dateFinish определены мной):
SELECT id, date, value FROM graph WHERE date BETWEEN dateStart AND dateFinish
Возвращает этот результат:
id | date | value
id0 | 2017-10-01 00:01:23 | 13
id1 | 2017-11-01 00:06:03 | 10
... | ... | ...
id0 | 2017-15-01 00:05:33 | 34
id1 | 2017-14-01 00:21:23 | 19
Мне нужно дублировать первую и последнюю строки каждого ID с датой как dateStart и dateFinish, поэтому результаты выглядят так:
id | date | value
id0 | dateFirst | 13
id1 | dateFirst | 10
id0 | 2017-10-01 00:01:23 | 13
id1 | 2017-11-01 00:06:03 | 10
... | ... | ...
id0 | 2017-15-01 00:05:33 | 34
id1 | 2017-14-01 00:21:23 | 19
id0 | dateFinish | 34
id1 | dateFinish | 19
Короче говоря, мне нужно дублировать первую и последнюю строку каждого идентификатора.
Причина этого требования заключается в том, что мы используем внешнюю библиотеку, где единственным требуемым параметром является запрос, поэтому я не могу коснуться результатов после запроса, поэтому я ищу чистое решение mySQL, если возможно,
Вы можете использовать union all
:
SELECT id, date, value
FROM graph
WHERE date BETWEEN v_dateStart AND v_dateFinish
UNION ALL
SELECT id, v_dateStart, value
FROM graph g
WHERE g.date = (SELECT MIN(g2.date) FROM graph g2 WHERE g2.id = g.id)
UNION ALL
SELECT id, v_dateEnd, value
FROM graph g
WHERE g.date = (SELECT MAX(g2.date) FROM graph g2 WHERE g2.id = g.id);