如果日期不存在,则获取给定日期的最后一行

时间:2019-01-02 09:39:33

标签: mysql sql date

我们如何查询一组记录以获取特定日期的数据,而这些日期中可能存在间隔。

示例数据

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 :(得分:2)

您可以使用相关子查询来执行此操作。以下内容将返回确切日期或最接近的先前日期的价格:

    (mix) lib/mix.ex:323: Mix.raise/1
    lib/mix/tasks/compile.make.ex:100: Mix.Tasks.Compile.ElixirMake.run/1
    (mix) lib/mix/task.ex:316: Mix.Task.run_task/3
    (mix) lib/mix/tasks/compile.all.ex:68: Mix.Tasks.Compile.All.run_compiler/2
    (mix) lib/mix/tasks/compile.all.ex:52: Mix.Tasks.Compile.All.do_compile/4
    (mix) lib/mix/tasks/compile.all.ex:23: anonymous fn/1 in Mix.Tasks.Compile.All.run/1
    (mix) lib/mix/tasks/compile.all.ex:39: Mix.Tasks.Compile.All.with_logger_app/1
    (mix) lib/mix/task.ex:316: Mix.Task.run_task/3

Demo on db<>fiddle

答案 1 :(得分:1)

您可以使用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

答案 2 :(得分:0)

似乎您需要年份的最高价格

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)