我有一份价值清单。我试图找到每个ID的最大值。其中Null是所有值的最大值。
ID DATE
1 '2013-01-26'
1 NULL
1 '2013-03-03'
2 '2013-02-23'
2 '2013-04-12'
2 '2013-05-02'
我想得到这个
ID DATE
1 NULL
2 '2013-05-02'
我知道如何在mysql中完成它。通过这样做
select ID, max(IFNULL(DATE,'3000-01-01'))
from test
group by ID
我想找到sqlalchemy版本。
这假设Null为最小值。
db_session.query(test, func.max(test.DATE)).group_by(test.ID).all()
答案 0 :(得分:3)
这很简单:
from datetime import date
# your query
res = session.query(
Test,
func.max(func.ifnull(Test.date, date(3000, 1, 1)))
).group_by(Test.id).all()
注意:您也可以使用COALESCE
。 COALESCE
是标准sql的一部分,它受到更多数据库的支持。
使用COALESCE
的查询示例:
res = session.query(
Test,
func.max(func.coalesce(Test.date, date(3000, 1, 1)))
).group_by(Test.id).all()