代码之家  ›  专栏  ›  技术社区  ›  Pratyush

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

  •  2
  • Pratyush  · 技术社区  · 6 年前

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

    实例数据

    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 回复  |  直到 6 年前
        1
  •  2
  •   Salman Arshad    6 年前

    您可以对相关的子查询执行此操作。以下内容将返回确切日期或最早日期的价格:

    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
    

    Demo on db<>fiddle

        2
  •  1
  •   Gaurav    6 年前

    您可以使用mysql last day函数和date_格式来获得所需的结果。查看查询:

    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

        3
  •  0
  •   ScaisEdge    6 年前

    似乎你需要一年的最高价格

    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)