按月份和年份从日期字段分组

2024-10-01 09:22:21 发布

您现在位置:Python中文网/ 问答频道 /正文

根据下表中的数据贷款修正案

    ID     |     Amount     | AddDeduct | AmendDate  
-----------+----------------+-----------+------------
 LT0000160 | 1000.000000000 | 2         | 2018-02-08
 LT0000170 | 1500.00000000  | 1         | 2018-02-10
 LN0000577 | 1000.000000000 | 1         | 2018-03-20
 LN0000587 | 2000.000000000 | 2         | 2018-03-20

我试图选择sum Amount字段,它们具有相同的年份和月份AmendDate。在

因此,我尝试在SQLALchemy中选择查询,如下所示:

^{pr2}$

但是,根据上面的查询,我只能按AmendDate的完全相同的日期(年、月和日)分组。在

更新:

我的模型如下所示:

class Loan_Amendment(Object):
    ID              =   db.Column(db.String(13), primary_key=True)
    AddDeduct       =   db.Column(db.String(1))
    Amount          =   db.Column(db.Numeric(25, 9))
    AmendDate       =   db.Column(db.String(20))

目前,我使用Flask-SQLAlchemy==2.0SQLAlchemy==0.9.9,DB类型是postgresql。在

AmendDate中,哪种方式可以只按月份和年份选择sum和group?在


Tags: 数据iddbstringsqlalchemycolumnamountsum
1条回答
网友
1楼 · 发布于 2024-10-01 09:22:21

使用^{}函数将日期截断为月精度:

month = func.date_trunc('month', Loan_Amendment.AmendDate)

AmendObj = db.session.query(func.sum(Loan_Amendment.Amount).label('Amount'),
                            month).\
    group_by(month).\
    first()
    # Did you mean all()?

另一个不太依赖数据库的选项是使用^{}

^{pr2}$

由于日期列实际上是文本,因此需要先进行强制转换。如果您使用的SQLAlchemy版本具有^{}快捷方式,1.0.7或更高版本,那么只需

func.date_trunc('month', Loan_Amendment.AmendDate.cast(Date))

如果没有,那么

from sqlalchemy import cast

func.date_trunc('month', cast(Loan_Amendment.AmendDate, Date))

如果使用提取物,自然也是如此。在


根据您的模型和数据,一个老套的解决方案是简单地取包含年和月部分的子字符串并按其分组:

month = func.substr(Loan_Amendment.AmendDate, 1, 7)

相关问题 更多 >