qq_26007951 2022-07-19 13:10 采纳率: 80%
浏览 110
已结题

一个sql server查询截止某个日期最新的记录

工具:sql server 2008 R2
给定一个日期,查询截止这个日期最新的一笔记录,例如查询表table中截止2021/6/30最新的一笔总股本记录。
如下图:

img

  • 写回答

6条回答 默认 最新

  • foreverliuyin 2022-07-19 15:03
    关注

    table改为表名

    select t2."代码",t2."日期",t2."总股本"
    from 
    (select "代码", max ("日期") as md  from table where "日期" <=to_date('2021-06-30','YYYY-MM-DD') group by "代码") t1 
    left join 
    table t2 
    on t1."代码" = t2."代码" and t1.md = t2."日期"
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 卖柴火的小伙子 2022-07-19 13:30
    关注

    参考实现:

    select * from table where datetime >= '2021-6-30' order by datetime desc limit 1;
    

    如有帮助欢迎采纳!

    评论
  • 快乐小土狗 2022-07-19 13:37
    关注

    select * from table where datetime <= '2021-6-30' order by datetime desc limit 1;
    筛选以前到2021-6-30的数据,
    order by datetime desc :根据datetime 降序排序
    https://blog.csdn.net/SYSZ520/article/details/116235694
    limit 1:取第一条
    https://blog.csdn.net/weixin_39931923/article/details/111097433

    评论
  • 诸法空性 2022-07-19 14:28
    关注

    select top 1 * from table where datetime <= '2021-6-30' order by datetime desc

    limit关键字是mysql里面的。
    sqlserver是top

    评论 编辑记录
  • qq_26007951 2022-07-19 14:33
    关注

    top不行,我想要一次性提取三条记录,不是一条记录,top1只能提取一条记录

    评论
  • 於黾 2022-07-19 14:58
    关注

    你想要不同代码的记录,那肯定要先group by呀
    而你要最新的记录,group by前面select要写max(时间)
    最后,你需要截止某一日期,那就加个where条件过滤一下
    如果不好组合,也可以嵌套一下,逻辑并不复杂
    比如内层先过滤出符合时间条件的数据,外层再group by一下完事

    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 7月27日
  • 已采纳回答 7月19日
  • 创建了问题 7月19日

悬赏问题

  • ¥15 mbedtls握手返回-7200
  • ¥30 c++ http服务器
  • ¥15 express连接mssql,每条额外附加了语句
  • ¥20 IQOO12如何有效ADB方法
  • ¥15 ios如何获取用户的订阅情况
  • ¥15 复杂表达式求值程序里的函数优先级问题
  • ¥15 求密码学的客成社记ji着用
  • ¥35 POI导入树状结构excle
  • ¥15 初学者c语言题目解答
  • ¥15 div editable中的光标问题