簡體   English   中英

腳本以基於一個表中的日期字段填充每月匯總表

[英]script to populate monthly summary tables based on the date field in one table

我需要開發一個像pl / sql塊這樣的sql腳本,以便從單個usertransaction表中將記錄填充到每月交易表中,例如txn_jan,txn_feb ... txn_dec。 該表有一個currentdate字段,我可以解析該字段以獲取月份,然后通過增加每個月度表中的transaction_cnt字段的計數來匯總所有類似的交易(如果其他字段都相同-resourceid,userid,objectid)。 因此,如果用戶在一天內重復進行了相同類型的交易,則usertransaction表將為每個交易分別記錄不同的條目,但是每月匯總表將在其date字段中僅包含日期部分的交易計數(按時間匯總日期)。

我該如何開發用於填充匯總表的腳本。我的usertransaction表中填充了數據。

usertransaction表字段 :userid,resourceid,doc_name,transid,currentdate(包括時間)

每月摘要表字段 :userid,resourceid,doc_name,transid,currentdate(不包括時間),trans_count

我也可以使用Java或groovy來做到這一點。但是我認為plsql可能是最好的?

您想在這里做兩件事。 我假設您正在使用Oracle(就像您在使用Java)。

首先,您希望將每個用戶的日常交易分組。
創建一個名為tempTable的登台表。
使用to_char(currentdate, 'yyyy/mm/dd')進行分組。

INSERT INTO tempTable
SELECT 
  userid,
  resourceid,
  doc_name,
  trans_id,
  to_char(currentdate, 'yyyy/mm/dd') as currentday,
  to_char(currentdate, 'MM') as month_value,
  count(*) as daily_count
FROM 
  usertransaction 
GROUP BY 
  userid,
  resourceid,
  doc_name,
  trans_id,
  to_char(currentdate, 'yyyy/mm/dd')

如果您有太多的數據行,我建議您改為執行此操作; 每天做一次。

INSERT INTO tempTable
SELECT 
  userid,
  resourceid,
  doc_name,
  to_char(currentdate, 'yyyy/mm/dd') as currentday,
  to_char(currentdate, 'MM') as month_value,
  count(*) as daily_count
FROM 
  usertransaction 
WHERE
  to_char(currentdate, 'yyyy/mm/dd') = to_char(SYSDATE, 'yyyy/mm/dd')
GROUP BY 
  userid,
  resourceid,
  doc_name,
  trans_id

其次,您將要根據month_value進行多次插入。

INSERT INTO txn_jan
SELECT
  userid,
  resourceid,
  doc_name,
  to_date(current_day, 'yyyy/mm/dd') as current_day,
  daily_count
FROM
  tempTable
WHERE month_value='01'

INSERT INTO txn_feb
SELECT
  userid,
  resourceid,
  doc_name,
  to_date(current_day, 'yyyy/mm/dd') as current_day,
  daily_count
FROM
  tempTable
WHERE month_value='02'

然后繼續

這樣的事情可能就是您想要的:

INSERT INTO txn_jan
SELECT userid, resourceid, doc_name, transid,
    cast(currentdate as date) as currentdate,
    count(*) as trans_count
FROM usertransaction
WHERE extract(year from currentdate) = 2012
    and extract(month from currentdate) = 1
GROUP BY cast(currentdate as date)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM