Получить последнюю строку для данных дат, если дата не существует - PullRequest
0 голосов
/ 02 января 2019

Как мы можем запросить набор записей, чтобы получить данные для определенных дат, где могут быть пропуски в датах.

Пример данных

date       | Price
------------------
2018-03-31 | 115
2018-03-29 | 114
2018-03-28 | 113
...
2017-03-29 | 117
2017-03-28 | 118
...
2016-12-30 | 143
2016-12-29 | 140
...
2015-12-31 | 110
2015-12-30 | 111

Обязательные данные для дат: 2018-03-31, 2017-03-31, 2016-12-31, 2015-12-31

date       | Price
------------------
2018-03-31 | 115
2017-03-31 | 117
2016-12-31 | 143
2015-12-31 | 110

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Вы можете сделать это с помощью коррелированного подзапроса.Следующее вернет цену за точную дату или ближайшую предыдущую дату:

SELECT dates.dt, (
    SELECT price
    FROM t
    WHERE date <= dates.dt
    ORDER BY date DESC
    LIMIT 1
) AS price
FROM (
    SELECT '2018-03-31' AS dt UNION ALL
    SELECT '2017-03-31' UNION ALL
    SELECT '2016-12-31' UNION ALL
    SELECT '2015-12-31'
) AS dates

Демо на db <> fiddle

0 голосов
/ 02 января 2019

Вы можете использовать функцию MySQL Last day и date_format для достижения желаемого результата.Проверьте запрос: -

select last_day(a11.d_date), a11.price
from test a11
join
(select MAX(d_date) d_date, DATE_FORMAT(d_date, "%M %Y")
from test
group by DATE_FORMAT(d_date, "%M %Y")
) a12
on a11.d_date = a12.d_date

SQL Fiddle

0 голосов
/ 02 января 2019

кажется, вам нужна максимальная цена за год

select max(date), max(price)
from my_table  m 
inner join  (

  select max(date), year(date) my_year
  from my_table 
  group by year(date) 

) t on t.my_year = year(m.date) 
group by year(m.date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...