Python Web2py DAL查找具有最新日期的记录

Python Web2py DAL查找具有最新日期的记录,python,postgresql,web2py,data-access-layer,Python,Postgresql,Web2py,Data Access Layer,嗨,我有一张桌子,结构如下 表名:文件 示例表结构: ID | UIN | COMPANY_ID | DOCUMENT_NAME | MODIFIED_ON | ---|----------|------------|---------------|---------------------| 1 | UIN_TX_1 | 1 | txn_summary | 2016-09-02 16:02:42 | 2 | UIN_TX_2 | 1

嗨,我有一张桌子,结构如下

表名:文件

示例表结构:

ID | UIN      | COMPANY_ID | DOCUMENT_NAME | MODIFIED_ON         |
---|----------|------------|---------------|---------------------|
1  | UIN_TX_1 | 1          | txn_summary   | 2016-09-02 16:02:42 |
2  | UIN_TX_2 | 1          | txn_summary   | 2016-09-02 16:16:56 | 
3  | UIN_AD_3 | 2          | some other doc| 2016-09-02 17:15:43 |
我想获取id为1且文档名为“txn\U summary”的公司的最新修改记录UIN

这是有效的postgresql查询:

select distinct on (company_id)
       uin
from documents
where comapny_id = 1
and document_name = 'txn_summary'
order by company_id, "modified_on" DESC;
此查询获取的UIN_TX_2是正确的

我使用web2py DAL来获得这个值。经过一些研究,我成功地做到了这一点:

fmax = db.documents.modified_on.max()
query = (db.documents.company_id==1) & (db.documents.document_name=='txn_summary')

rows = db(query).select(fmax)
现在“行”只包含具有最大值的修改日期的值。我想获取在“行”中有最大日期的记录。请建议一条路。非常感谢你的帮助


我的要求是为每个文件名的每个公司id查找每个此类记录。

您的方法不会返回完整的行,它只返回上次修改的值

要获取id为1且文件名为“txn\U summary”的公司的上次修改记录,将执行查询

query = (db.documents.company_id==1) & (db.documents.document_name=='txn_summary')
row = db(query).select(db.documents.ALL, orderby=~db.documents.modified_on, limitby=(0, 1)).first()
orderby=~db.documents.modified_on
将返回按
modified_on
降序排列的记录(最后修改的记录将排在第一位),并且
first()
将选择第一条记录。i、 e.完整查询将返回上次修改的记录,其中包含公司1和文档\u name=“txn\u摘要”


可以有其他/更好的方法来实现这一点。希望这有帮助

您的意思是希望通过单个查询获取每个公司id/文档名称组合的最后修改记录,还是希望对每个组合执行单独的查询?您能为您想要的确切结果显示SQL表达式吗?您好@Anthony,很抱歉响应太晚。是的,我想要每个公司id/文件名组合的上次修改记录。我希望使用下面的答案中提到的查询在单个(公司id/文档名称)组合列表上运行for循环。这种方法有点效率低下,因为它会选择所有匹配的记录并将它们转换为
对象,然后只选择最近的记录(通过
.first
,这是一种Python方法,不影响SQL查询)。为了提高效率,请在
.select()
调用中添加
limitby=(0,1)
,因为这将确保数据库只返回第一条(即最近的)记录(注意,即使只返回一条记录,您仍然需要
.first
对象中提取它)。正确。谢谢Anthony!做了相应的更改。