SqlAlchemy group_by并返回最大日期

时间:2017-08-19 19:49:44

标签: python sqlalchemy greatest-n-per-group

我有一张表

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

谢谢

3 个答案:

答案 0 :(得分:9)

使用子查询:

!

在SQLAlchemy中:

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;

答案 1 :(得分:1)

使用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表达式的same

答案 2 :(得分:0)

在orm中,您几乎可以像在mysql中一样编写

result = session.query(Table,func.max(Table.date)).group_by(Table.identifier)
for row,i in result:
    print(row.date,row.value,row.identifier,i)