我正在为我的项目使用SQLAlchemy,并且遇到需要复杂查询的问题。我承认SQL不是我最强的套装。我的问题是这样的。SQL(炼金术)查询,获取具有相同外键的所有条目的最新条目
有两个表问题(父母)和一对多关系的变化。更改包含一个条目“changed_on”和一个外键“issue_id”,以及一个“新”值更改的“字段”。
(如 的变化可以有issue_id = 1, field='status', new='closed' changed_on='25/01/2012'
和issue_id = 1, field='status', new='resolved', changed_on='24/01/2012'
)
我要算多少这样的变化,我们以前有过一个X日起,但只得到了一个具有最新日期的(最新的是与查找日期相关)。
到目前为止我的代码之前的某一天X
for day in dates:
q2 = Change.session.query(func.count(Change.id)).\
filter(Change.changed_on <= day, Change.field == attr, Change.new == value).all()
这得到前“天”某一特定领域和价值的物品的正确的计数,但它并没有考虑到,以获得计数最新的更新值。
我意识到,在过滤我会砸Change.new == value
但在那之后我如何过滤它得到的只是带有Y的X更改的最新更新ISSUE_ID
编辑:
更好的办法做到这将是每天都能像
{
'01/04/2015': {
'open' :10,
'closed' : 15....}
}
但一些日子的字典的问题可以从新建 - >收走了,所以我们需要统计,只有关闭那些(LA测试更新)
相当正确的方式。谢谢! 但这会重复计算issue_id相同的问题,对吧? 有什么办法如果添加ISSUE_ID选择和组你特定问题的数量来获得与同ISSUE_ID所有更改的条目,并只计算“最新” – MayTheSchwartzBeWithYou 2015-03-02 14:56:19
@MayTheSchwartzBeWithYou : 查询(Change.Issue_id ... ).filter(Change.changed_on> '22/01/2012',....)。group_by(Change.issue_id,... [在select中的其他字段]) – denex 2015-03-03 09:52:29
非常感谢@denex。我用数据结构和你的指导解决了它。我明天会发布解决方案。 干杯 – MayTheSchwartzBeWithYou 2015-03-04 23:44:47