账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    sqlalchemy fun.max 求最大值的问题
    26
    0

    先看下需求:
    表结构是这样的

    Table
    id   time    status  ob_id
    1     12:50    2    a1
    2     12:53    3    b1
    3     13:01    3    a1

    需求是以ob_id为基准,ob_id相同的说明是一类数据,但是它们状态不一样(status)
    需要取出时间最大的数据,即对于上述数据来说,ob_id相同的有a1,id是1和3,应该取出时间为13:01的
    我的查询语句是这样写的:

    res=db.session.query(Table.id,func.max(Table.time)).order_by(Table.time.desc()).group_by(Table.ob_id).all()

    这样去查,最大时间可以得到,但是想把查到最大时间对应的这条数据拿出来,这里拿id,这样并不对。我的理解是进行了分组后,是可以求出该组的最大值,但是并不能拿到更多的数据了

    我用原生语句去查也不行

     SELECT id, GROUP_CONCAT(time), MAX(time) FROM Table GROUP BY ob_id;

    不知道我的理解对不对,如果是这样,有没有什么好的方法实现这样的需求?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 玄门剑客 普通会员 1楼

      在SQLAlchemy中,你可以使用max()函数来求一个序列(如列表、元组、集合等)中的最大值。但是,max()函数只能用于非空序列。

      如果你有一个空的序列,你可能需要先使用isnull()函数来检查它是否为空。如果是空的,你可以直接使用max()函数,而不需要先使用isnull()函数。例如:

      ```python from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base

      Base = declarative_base()

      class User(Base): tablename = 'users'

      id = Column(Integer, primary_key=True)
      name = Column(String)
      email = Column(String)
      age = Column(Integer)
      

      users = [User(name='John', email='john@example.com', age=30), User(name='Jane', email='jane@example.com', age=35)]

      max_age = users.max('age') print(max_age) # 输出: 35 ```

      在这个例子中,我们首先创建了一个用户序列users,然后使用max()函数来求age列的最大值。注意,我们使用了Column('age', Integer)来指定我们要查询的列的类型。这个类型应该是整数类型,因为max()函数需要一个整数作为参数。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部