Ste*_*n G 2 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
Run Code Online (Sandbox Code Playgroud)
我试图选择每个标识符的最大日期,例如我得到:
identifier date value
A 2017-01-03 7
B 2017-01-03 3
Run Code Online (Sandbox Code Playgroud)
谢谢
r-m*_*m-n 10
使用子查询:
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;
Run Code Online (Sandbox Code Playgroud)
在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
)
)
Run Code Online (Sandbox Code Playgroud)
使用 ORM,您可以使用over实际上是窗口函数的函数:
session \
.query(Table, func.max(Table.date)
.over(partition_by=Table.identifier, order_by=Table.value))
Run Code Online (Sandbox Code Playgroud)
它返回一个元组(table_instance,latest_datetime)。order_by在这种情况下是可选的。
在相同的使用SQL表达式。
| 归档时间: |
|
| 查看次数: |
5650 次 |
| 最近记录: |