我需要像pl / sql块一样开发一个sql脚本,将记录填充到每月事务表中,例如来自单个usertransaction表的txn_jan,txn_feb ... txn_dec。这个表有一个currentdate字段,我可以解析得到月份,然后通过在每个月表中输入transaction_cnt字段的数量来总结所有类似的事务(如果其他字段都相同 - resourceid,userid,objectid)。因此,如果用户在一天内重复执行相同的交易,那么usertransaction表将为每个trnasaction分配条目,但是每月汇总表将具有事务的计数,其日期部分仅包含日期部分(在时间上按时汇总)日期)。
如何开发用于填充汇总表的脚本..我的usertransaction表填充了数据。
usertransaction表字段:userid,resourceid,doc_name,transid, currentdate(包括时间)
每月汇总表字段:userid,resourceid,doc_name,transid, currentdate(不包括时间),trans_count
我也可以使用java或groovy这样做..但我认为plsql可能是最好的?
答案 0 :(得分:1)
你想在这做两件事。我假设您正在使用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'
继续......
答案 1 :(得分:0)
这样的事情可能就是你所追求的:
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)