首頁>Program>source

我需要在一段時間內找到一些帐戶的零钱.假設我有几个帐戶,钱来去去。 我需要找到2020年11月每个唯一帐戶的開始金額和結束金額以及差異。

我有一个如下表:

--------------------------------------------------------------------------------------------
code_filial   | oper_day      |  code_account       |   sum_in           | sum_out        |
--------------------------------------------------------------------------------------------
00116         | 2020-05-12    | 1740100126          | 187322000          | 210522000     |
00116         | 2020-05-14    | 1740100126          | 210522000          | 256582000     |
00116         | 2020-11-04    | 1740100250          |  2000000           | 52050         |
00116         | 2020-11-05    | 1740100250          | 52050              | 2872050       |
00116         | 2020-11-14    | 1740100250          | 2872050            | 5855000       |
00116         | 2020-11-30    | 1740100250          | 5855000            | 7837000       |
00116         | 2020-12-03    | 1740100250          | 7837000            | 4900000       |

結果應如下所示:

-------------------------------------------------------------------------------------------------------
code_filial   | oper_day      |  code_account       |   sum_in            | sum_out        | diffrence 
-------------------------------------------------------------------------------------------------------
00116         | 2020-05-14    | 1740100126          | 256582000          | 256582000     | 256582000
00116         | 2020-11-04    | 1740100250          |    2000000         | 7837000       | 5837000

例如 256582000 帐戶,此帐戶尚未在 november 2020中进行任何處理 ,所以我需要 最後維兹 作為sum_in和sum_out,差異也將相同.但是万一 sum_out 帐戶,在此帐戶中 在 1740100250上完成了一些操作 日期,11月的第一个日期,sum_in以 2020-11-04開頭 和 在11月 2000000的最後一天 sum_out是 2020-11-30 ,不同之處在於 7837000 . 我尝試了一些方法,但無法做出邏輯。

7837000 - 2000000 = 5837000
最新回復
  • 6月前
    1 #

    您可以使用 GROUP BYKEEP的分析功能 子句如下(請註意,我尚未對其进行測試。只是根据要求建立了查詢。如果有任何錯誤,則需要解決的錯誤很少)

    select code_filal, code_account, oper_day, sum_in, sum_out,
           case when is_entry_nov_exists > 0 then sum_out-sum_in else sum_out end as difference
    from
    (select code_filal, code_account, is_entry_nov_exists,
            case when is_entry_nov_exists > 0 
                 then min(case when oper_day >= date '2020-11-01' and oper_day < date '2020-12-01' 
                               then oper_day end)
                 else max(oper_day) 
            end as oper_day,
            case when is_entry_nov_exists > 0 
                 then max(case when oper_day >= date '2020-11-01' then sum_in end) 
                      keep (dense_rank first order by oper_day)
                 else max(sum_out) 
                      keep (dense_rank last order by oper_day) 
            end as sum_in,
            case when is_entry_nov_exists > 0 
                 then max(case when oper_day >= date '2020-11-01' then sum_out end) 
                      keep (dense_rank last order by oper_day)
                 else max(sum_out) 
                      keep (dense_rank last order by oper_day) 
            end as sum_out
     from
    (select t.*, 
            count(case when oper_day >= date '2020-11-01' and oper_day < date '2020-12-01' 
                       then 1 
                  end) 
               OVER (partition by code_filial, code_account) as is_entry_nov_exists
      from your_table t 
     where oper_day < date '2020-12-01') t
    group by code_filal, code_account, is_entry_nov_exists) t
    

  • apache:htaccess重寫任何檔案夹,但不重寫任何檔案
  • javascript:htmlerb模板中的v模型呈現函式(){[本地代碼]}