我有一张表
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
谢谢
答案 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)