sql筛选每月最后一天的数据

问题描述如图,请问这里的where条件应该如何判定1.png



Zhangggg 发布于 2020-12-4 10:42
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
zsh331Lv8专家互助
发布于2020-12-4 10:44(编辑于 2020-12-4 11:04)

按yyyy-MM分组,求最大yyyy-MM-dd值;

=======

select max(opttime) as t  from tabname group by  convert(char(6),opttime,112)


  • Zhangggg Zhangggg(提问者) 已经OK,谢谢!用这个做where条件了
    2020-12-04 11:19 
  • zsh331 zsh331 回复 Zhangggg(提问者) 表客气,第一次回复告诉你思路,貌似不行,那就继续直接把脚本写出来了= =#
    2020-12-04 11:20 
  • Zhangggg Zhangggg(提问者) 回复 zsh331 当时急着写出来,就直接先看看提供脚本了的,哈哈哈。
    2020-12-04 13:47 
最佳回答
0
luojian0323Lv7资深互助
发布于2020-12-4 10:47(编辑于 2020-12-4 10:51)
where opttime=last_day(opttime) --opttime是日期类型可以直接这么写,不是日期类型要转成日期类型
(这是db2的写法。)



下面提供3种实现查询本月最后一天的日期的SQL语句:
方法一:
select dateadd(dd,-1,convert(char(8),(datepart(yy,dateadd(mm,1,getdate()))*10000+datepart(mm,dateadd(mm,1,getdate()))*100+01))) 
--输出:2017-05-31 00:00:00.000
方法二:
select dateadd(dd,-1, convert(datetime,left(convert(varchar, dateadd(mm,1,getdate()) ,112),6) + '01') )--或者这样写:select dateadd(dd,-1,  left(convert(varchar, dateadd(mm,1,getdate()) ,112),6) + '01'  )--输出:2017-05-31 00:00:00.000
方法三:
SELECT DATEADD(DD, -DAY(DATEADD(MM, 1, getdate() )), DATEADD(MM, 1, getdate() ))  
--输出:2017-05-31 01:34:58.071
  • Zhangggg Zhangggg(提问者) 嗯嗯,我这样写过不可以的,这个是sybase数据库,我之前这样子写不对
    2020-12-04 10:49 
最佳回答
0
15682756756Lv2见习互助
发布于2020-12-4 10:55

什么数据库?

是要指定日期对应月份的最后一天,还是要每个月的最后一天?

  • Zhangggg Zhangggg(提问者) sybase数据库,看我的图片,最后筛选的结果就是11月的只要最后一天的数据,其余月份的数据要保留的; 根据你的问题的话,就是要达到展示的数据都是每月最后一天的数据
    2020-12-04 10:57 
  • 15682756756 15682756756 回复 Zhangggg(提问者) https://blog.csdn.net/weixin_30466421/article/details/96961704 参考这个
    2020-12-04 10:59 
  • 15682756756 15682756756 回复 Zhangggg(提问者) where optime = (select distinct last_day(optime) from tablename)
    2020-12-04 11:00 
  • 4关注人数
  • 516浏览人数
  • 最后回答于:2020-12-4 11:04
    请选择关闭问题的原因
    确定 取消
    返回顶部