作者ji394su33000 (一枝独秀不是春)
看板Database
标题Re: [SQL ] ID归户後再累计如何进行?
时间Fri Nov 18 16:20:05 2022
※ 引述《SGMitchi14 (永不放弃)》之铭言:
: (针对 SQL 语言的问题,用这个标题。请用 Ctrl+Y 砍掉这行)
: 资料库名称:oracle SQL Developer
: 资料库版本:1.5.5
: 内容/问题描述:
: 各位资料库先进好,小弟是资料库新手,自行看书并实际操作学习,
: 最近遇到几个棘手的问题,再恳请先进们指教,谢谢。
: 问题一:资料库栏位含月份、ID,我想要计算ID归户後再累计
: 例如1月:1月同ID的人数
: 2月:1-2月中,同ID的人数【意即1-2月只要出现1次就只算1次】
: .
: .
: 6月:1-6月中,同ID的人数
: 以此类推...
: 所以可能产生的结果:
: 1月:3000人
: 2月:3500人【单独只看2月也是3000人,但有500人是2月才出现,1月没有出现过】
: 3月:4000人【单独只看3月也是3000人,但有500人是3月才出现,1-2月没有出现过】
: 请问这样有什麽方式可以解决吗?
我看起来应该是在问去重复的问题:
declare
V_MONTH int;
V_COUNT int;
V_RESULT int;
begin
V_COUNT := 0;
--不知道你月份什麽格式 就先用yyyymm
V_MONTH := TO_CHAR(ADD_MONTHS(trunc(SYSDATE, 'yyyy'), + V_COUNT), 'yyyymm');
while V_MONTH <= TO_CHAR(SYSDATE, 'yyyymm') loop
select count(distinct ID) into V_RESULT
from table
where 月份 >= trunc(SYSDATE, 'yyyymm') --今年
and 月份 <= V_MONTH
;
-- 看结果,检视(V)打开下面有个DBMS输出,绿十字选取连线。
DBMS_OUTPUT.PUT_LINE(V_MONTH || ' ' || V_COUNT || ' ' || V_RESULT);
V_COUNT := V_COUNT + 1;
V_MONTH := TO_CHAR(ADD_MONTHS(trunc(SYSDATE, 'yyyy'), + V_COUNT), 'yyyymm');
commit;
end loop;
end;
: 问题二:我有一段语法,里面有3段子查询进行join,跑出来的笔数约80万笔
: 执行时间约1分钟,但要针对上述语法求每人每月的最大值
: 一直都跑不出来,试过跑了25分钟还是跑不出来
: 请问有什麽部分需要注意呢?
: 以上问题,再恳请先进们指教,谢谢
要嘛条件写错,要嘛没index在table scan,若还有其他状况就by case了。
--
大哥不要说二哥 打落尘埃 这是要逆天的节奏阿 牛不饮水强按头 不负如来不负卿 脚盆国
好言难劝该死的鬼 时来天地皆同力 运去英雄不自由 屠龙者终将成为恶龙 一剑破万法 给
我破 给我开 生当做人杰 死亦为鬼雄 你不装逼会死吗 霓虹国 一力降十会 待我长发及腰
天不生我*** **万古如长夜 人生不如意十之** 东躲XC 开弓没有回头箭 冤仇要结就结到底
心之所向 素履以往 天下风云出我辈 一入江湖岁月催 皇图霸业谈笑中 不胜人生一场醉
得之我幸 失之我命 阎王好见小鬼难缠 仗义每多屠狗辈 一只穿云箭 不拿一针一线 漂亮国
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.130.162.85 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1668759613.A.EC8.html
1F:推 SGMitchi14: 我来试试看您的方式,谢谢您的指教,谢谢 11/20 01:20