SqlAlchemy group_by 并返回最大日期

新手上路,请多包涵

我有一张这样的桌子

identifier date        value
A          2017-01-01  2
A          2017-01-02  1
A          2017-01-03  7
B          2017-01-01  2
B          2017-01-02  7
B          2017-01-03  3

我正在尝试选择每个标识符的最大日期,例如我得到的:

 identifier date        value
A          2017-01-03  7
B          2017-01-03  3

谢谢你

原文由 Steven G 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 757
2 个回答

使用子查询:

 SELECT t1.identifier, t1.date, t1.value FROM table t1
JOIN
(
    SELECT identifier, MAX(date) maxdate
    FROM table
    GROUP BY identifier
) t2
ON t1.identifier = t2.identifier AND t1.date = t2.maxdate;

在 SQLAlchemy 中:

 from sqlalchemy import func, and_

subq = session.query(
    Table.identifier,
    func.max(Table.date).label('maxdate')
).group_by(Table.identifier).subquery('t2')

query = session.query(Table).join(
    subq,
    and_(
        Table.identifier == subq.c.identifier,
        Table.date == subq.c.maxdate
    )
)

原文由 r-m-n 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用 ORM,您可以使用 over 实际上是窗口函数的函数:

 session \
    .query(Table, func.max(Table.date)
           .over(partition_by=Table.identifier, order_by=Table.value))

它返回一个元组 (table_instance, latest_datetime)。 order_by 在这种情况下是可选的。

SQL 表达式 也是如此

原文由 Eugene Lopatkin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏