繁体   English   中英

SQLAlchemy:选择行,按日期列分组,其日期时间列对于每个日期都是最新的

[英]SQLAlchemy: Select rows, grouped by a date column, whose datetime column is most recent for each date

给定 PostgreSQL 数据库中的下表。

价值 created_at 日期
2 2022-02-01 01:01:01 2022-03-15
10 2022-02-15 01:01:01 2022-03-15
5 2022-02-02 01:01:01 2022-03-16
6 2022-02-16 01:01:01 2022-03-16

您如何编写 sqlalchemy 代码:

  1. date列分组
  2. 获取每个日期最近的created_at
  3. 返回满足该条件的所有行

上述查询的输出应如下所示:

价值 created_at 日期
10 2022-02-15 01:01:01 2022-03-15
6 2022-02-16 01:01:01 2022-03-16

我尝试了以下查询:

query = (
            select(
                func.max(TABLE.created_at),
                TABLE.date,
                TABLE.value
            )
            .group_by(models.TABLE.date)
        )

但是得到错误"value" must appear in the GROUP BY clause or be used in an aggregate function

而根据我的理解,使用聚合函数或在 GROUP BY 子句中包含“值”不会提供所需的结果。

我可以使用什么查询来获取所需的行?

我正在寻找独特的条款

query = select(TABLE).distinct(
            TABLE.date
        ).order_by(
            TABLE.date,
            TABLE.created_at.desc(),
        )

我在我正在做的项目中遇到了同样的问题,但是在阅读了有关relationshipsdistinct文档之后,我提出了这个查询。 你也可以这样试试,希望对你有帮助。

query = (
         select value, created_at, date, count(distinct(date)) from TABLE group by value, created_at, date
        )

暂无
暂无

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

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