Web2py DAL 查找最新日期的记录

Posted

技术标签:

【中文标题】Web2py DAL 查找最新日期的记录【英文标题】:Web2py DAL find the record with the latest date 【发布时间】:2017-01-11 05:28:53 【问题描述】:

您好,我有一个具有以下结构的表。

表格名称:DOCUMENTS

示例表结构:

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 查找每个此类记录。

【问题讨论】:

您是说您想要一个查询来获取每个 company_id/document_name 组合的最后修改记录,还是您想为每个组合执行单独的查询?你能显示你想要的确切结果的 SQL 表达式吗? 嗨@Anthony,抱歉回复晚了。是的,我想要每个 company_id/document_name 组合的最后修改记录。我希望使用下面答案中提到的查询在单个(company_id/document_name)组合列表上运行 for 循环。 【参考方案1】:

您的方法不会返回完整的行,它只会返回最后一个 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" 的最后修改记录。

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

【讨论】:

这种方法效率有点低,因为它会选择所有匹配的记录并将它们转换为Row对象,然后才选择最近的(通过.first,这是一种Python方法,不影响 SQL 查询)。为了提高效率,将limitby=(0, 1) 添加到.select() 调用中,因为这将确保数据库只返回第一条(即最近的)记录(注意,即使只返回一条记录,您仍然需要.firstRows 对象中提取它)。 正确。谢谢安东尼!是否进行了相应的更改。

以上是关于Web2py DAL 查找最新日期的记录的主要内容,如果未能解决你的问题,请参考以下文章

查找具有特定值的最新记录

是否有 web2py 的 DAL 的命名约定列表?

没有 web2py 的 DAL

默认情况下,级联上的 web2py 数据库抽象层 (DAL) 引用是啥?

根据日期仅选择每条记录的最新版本 | MS Access [重复]

查找每条记录的交叉表的最新条目?