python - Web2py DAL 查找最新日期的记录

标签 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          | txn_summary   | 2016-09-02 16:16:56 | 
3  | UIN_AD_3 | 2          | some other doc| 2016-09-02 17:15:43 |

我想获取id为1、document_name为“txn_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)

现在“rows”仅包含具有最大值的modified_on日期的值。我想获取“行”内具有最大日期的记录。请建议一个方法。非常感谢您的帮助。

我的要求扩展到为每个 document_name 的每个 company_id 查找每个此类记录。

最佳答案

您的方法不会返回完整的行,它只会返回最后的modified_on值。

要获取 id 为 1 且 document_name“txn_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() 将选择第一条记录。即完整的查询将返回最后修改的记录,其中包含公司 1 和 document_name = "txn_summary"。

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

关于python - Web2py DAL 查找最新日期的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39303554/

相关文章:

python - 提取标签之间的 HTML

python - 如何在 python 中将数组集合写入 csv 文件?

postgresql - Postgres : strange behavior with optimistic locking

jquery id 选择器未返回正确的对象

python - 如何使用标准 auth api 和 username=True 更改 web2py 中用户的电子邮件地址

python - Python 是否有 .pdbinit 文件(类似于 .gdbinit 文件)?

python - 如何将每分钟数据的表转换为每小时数据的表?

postgresql - Postgres COPY FROM 永远

node.js - postgres SELECT 查询返回不可用的结果

python - web2py,一对多,非必需关系