SQL如何实现,选择某一个日期后返回上一年同期的范围数据呢?

需求:MYSQL数据库

目前存在一个日维度的单一日期控件,当选择某一个日期后,返回上一年同期的返回数据;

例如:选择了2025-08-15,那么返回的数据就是,2024年8月1号 到 8月15号的范围数据;

需要注意的是,返回的不是单一日期,而且上一年同期的范围数据

FineReport Henry.99 发布于 前天 16:42 (编辑于 前天 16:45
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
期待遇见youLv4初级互助
发布于前天 16:44

你啥数据库

  • Henry.99 Henry.99(提问者) mysql
    2025-09-08 16:45 
  • Henry.99 Henry.99(提问者) 唉哥又是你哦,你那个获取上个月的非常好用,咋获取上一年的同期呀
    left(日期,10)>=DATE_FORMAT('${start_dt}'- INTERVAL 1 month, '%Y-%m-01')

    left(日期,10)<=DATE_FORMAT('${start_dt}'- INTERVAL 1 month, '%Y-%m-%d')
    2025-09-08 16:46 
  • 期待遇见you 期待遇见you 回复 Henry.99(提问者) left(日期,10)>=DATE_FORMAT('${start_dt}'- INTERVAL 1 year, '%Y-%m-01')

    left(日期,10)<=DATE_FORMAT('${start_dt}'- INTERVAL 1 year, '%Y-%m-%d')
    2025-09-09 08:49 
最佳回答
0
CD20160914Lv8专家互助
发布于前天 22:12(编辑于 前天 22:19

关于日期函数的,一般不建议用数据库的函数。直接用帆软的函数实现,因为到时候迁移没有任何兼容的问题!!!

-------------------类似以下这个语句,你是mysql,sql server,pg数据库等都是通用的,因为它用的帆软的函数实现的,与数据库没有太大关系了----------------

以下这种写法并不推荐!!没有性能可言

select * from 表名称

where 1=1

left(日期,10)>='${format(YEARDELTA(start_dt,-1),"yyyy-MM-01")}'

left(日期,10)<='${format(YEARDELTA(start_dt,-1),"yyyy-MM-dd")}'

image.png

-----------------------------------------------------------------------------

更推荐如下这种方式,因为你用left以后会破坏数据库中的索引!而且用where 对字段使用函数其实是没有任何效率的,还有你的日期假如有时分秒的内容。那么让它小于多一天的日期,这样肯定永远会把1-15号的数据都展示完整的。2024-08-15 23:59:59 这个不管后面有多大的毫秒,也会小于16号的!

select * from 表名称

where 1=1

日期>='${format(YEARDELTA(start_dt,-1),"yyyy-MM-01")}'

日期<'${format(DATEDELTA(YEARDELTA(start_dt,-1),1),"yyyy-MM-dd")}'

image.png

  • 3关注人数
  • 26浏览人数
  • 最后回答于:前天 22:19
    请选择关闭问题的原因
    确定 取消
    返回顶部