我当前的系统有问题。我的数据库中有一个名为的表Payment
。这是桌子的图片
如您所见,我对 3 月和 4 月的利息余额有相同的详细信息。但我希望resultset
值是这样的:
我只想要currentIntBal
每个月的一个细节。顺便说一句,我还需要知道如何将日期转换varchar
为日期数据类型本身,因为该字段lastPaymentDate
是varchar
数据类型我怎么可能做到呢?
我当前的系统有问题。我的数据库中有一个名为的表Payment
。这是桌子的图片
如您所见,我对 3 月和 4 月的利息余额有相同的详细信息。但我希望resultset
值是这样的:
我只想要currentIntBal
每个月的一个细节。顺便说一句,我还需要知道如何将日期转换varchar
为日期数据类型本身,因为该字段lastPaymentDate
是varchar
数据类型我怎么可能做到呢?
with monthlyPayments as
(
select *
, rownum = row_number() over (partition by year(lastPaymentDate), month(lastPaymentDate) order by lastPaymentDate)
from payments
)
select lastPaymentDate
, currentIntBal
from monthlyPayments
where rownum = 1
在这种情况下,我只是每月支付第一笔款项。
在附加信息后编辑:
with monthlyPayments as
(
select *
, rownum = row_number() over (partition by year(convertedDate), month(convertedDate) order by convertedDate)
from payments p
cross apply (select convertedDate = cast(replace(lastPaymentDate,'-','') as date)) c
)
select lastPaymentDate = convertedDate
, currentIntBal
from monthlyPayments
where rownum = 1
在上面的新查询中,我将lastPaymentDate从更改varchar
为date
。我使用了 aCROSS APPLY
所以它可以被多次引用而无需重复代码。
请注意,我还将日期格式更改为 ISO 格式,以防止不同连接语言出现任何问题 -YYYY-MM-DD
可能会给出不一致的结果,但YYYYMMDD
会保持一致。
像这样的东西:
SELECT MIN(lastPaymentDate) As lastPaymentDate, currentInBal
FROM yourTable
GROUP BY currentInBal, MONTH(lastPaymentDate)+12*YEAR(lastPaymentDate)
另一种略有不同的方式:
SELECT MIN(lastPaymentDate) As lastPaymentDate,
MIN(currentInBal) As currentInBal
FROM yourTable
GROUP BY MONTH(lastPaymentDate)+12*YEAR(lastPaymentDate)