[英]How To Calculate Current Value With Max Date Last Month Value
我已经使用基本查询汇总了每日数据,并且每个数据都需要使用上个月的最后日期值进行计算。 例如,如果 I select 2022 年 2 月 3 日,则该值应使用 2022 年 1 月 31 日的值计算。
这是我当前的查询
SELECT
TGL, SUM(A.NOM_IDR) AS TotValue
FROM(
SELECT
B.DATE AS TGL
, (A.NOMINAL_IDR * -1) as NOM_IDR
FROM
MIS.FACT_LOAN A
LEFT OUTER JOIN
MIS.DIM_PERIOD B ON A.SK_PERIOD = B.SK_PERIOD
WHERE
YEAR(B.DATE) = '2022'
)
GROUP BY TGL;
结果是这样的
TGL | TotValue
2022-01-31 300000
2022-02-01 400000
2022-02-02 200000
.
.
.
2022-02-28 370000
2022-03-01 250000
我已经尝试使用此查询获取每个月的最后一个日期及其 TotValue
SELECT
B.DATE AS LASTDAYPERMONTH
, SUM(A.NOMINAL_IDR * -1)
FROM MIS.FACT_LOAN A
LEFT JOIN
MIS.DIM_PERIOD B ON A.SK_PERIOD = B.SK_PERIOD
INNER JOIN
(SELECT MAX(B.DATE) AS MaxDatePerMonth
FROM MIS.FACT_LOAN A
LEFT JOIN
MIS.DIM_PERIOD B ON A.SK_PERIOD = B.SK_PERIOD
WHERE YEAR(B.DATE) = '2022'
GROUP BY MONTH(B.DATE)
) aa ON aa.MaxDatePerMonth = B.DATE
WHERE YEAR(B.DATE) = '2022'
GROUP BY B.DATE
但我不知道如何将它与我当前的查询结合起来以达到我想要的结果。 下面是我想要的结果的例子
TGL | TotValue | LastMonthValue
2022-01-31 300000 0
2022-02-01 400000 300000
2022-02-02 200000 300000
.
.
.
2022-02-28 370000 300000
2022-03-01 250000 370000
我怎样才能达到这个结果? 如果解释有点尴尬,请帮助我找到正确的查询。
您可以首先通过从now()
中减去INTERVAL 1 MONTH
来获得上个月,然后将其作为参数传递给LAST_DAY
:
SELECT LAST_DAY(now() - INTERVAL 1 MONTH)
你可以这样做:
`
SELECT STR_TO_DATE(CONCAT('01', RIGHT(DATE_FORMAT(NOW(), '%d/%m/%Y'), 8)),'%d/%m/%Y') - INTERVAL 1 DAY;
尝试这个:
WITH TAB (TGL, TotValue) AS
(
VALUES
(DATE ('2022-01-31'), 300000)
, (DATE ('2022-02-01'), 400000)
, (DATE ('2022-02-02'), 200000)
, (DATE ('2022-02-28'), 370000)
, (DATE ('2022-03-01'), 250000)
)
SELECT
A.*
, COALESCE (B.TotValue, 0) AS LastMonthValue
FROM TAB A
LEFT JOIN TAB B
ON B.TGL = A.TGL - DAY (A.TGL)
ORDER BY A.TGL
dbfiddle链接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.