繁体   English   中英

如何使用最大日期上个月值计算当前值

[英]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)

你可以这样做:

  1. 使用 DATE_FORMAT() 将当前日期作为字符串获取
  2. 使用 RIGHT() 和 CONCAT() 获取当前月份的第一天
  3. 使用 STR_TO_DATE() 将字符串转换为日期
  4. 并用 INTERVAL 减去一天

`

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM