繁体   English   中英

SQLAlchemy:获取分组值的最大值

[英]SQLAlchemy: get max of grouped values

我的 Flask 应用程序中有这张表:

class Events(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    timestamp_event = db.Column(db.DateTime, nullable=False)

我需要获取记录最多事件的那一天,包括可打印格式(例如 d/m/y)的值和日期本身。 我在尝试:

daily_max = db.func.max(db.session.query(db.func.count(Events.id),\
                        db.func.date_format(Events.timestamp_event,'%d/%m/%y'))\
                        .group_by(db.func.date_format(Events.timestamp_event,'%Y%M%D')))

然后希望 daily_max[0] 将具有该值,而 daily_max[1] 将具有没有 hh:mm:ss 的日期

当我在查询后打印 daily_max 时,值为:

daily_max =  max((SELECT count(events.id) AS count_1, date_format(events.timestamp_event, :date_format_2) 
                  AS date_format_1 
                  FROM events GROUP BY date_format(events.timestamp_event, :date_format_3)))

这是数据样本。 答案( daily_max值)应该是(3, "21/01/2022")

id   timestamp_event
---- ---------------
1    2022-01-15 12:34
2    2022-01-21 01:23
3    2022-01-21 05:33
4    2022-01-21 11:11
5    2022-01-23 00:01
6    2022-01-23 23:29

关于我做错了什么的任何线索? 在文档中找不到答案。

这是可怕(无效)的方式:

daily_max = db.session.query(db.func.count(Events.id),
            db.func.date_format(Events.timestamp_event,'%d/%m/%y'))\
            .group_by(db.func.date_format(Events.timestamp_event,'%Y%M%D'))\
            .order_by(db.func.count(Events.id).desc()).first()

它将所有对 (id count, days) 分组,按计数以相反的顺序对这些对进行排序,然后获取第一对。

它确实有效,但我真的很想知道使用 func.max() 的高效、优雅的方式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM