下面sql的目標是實現在查詢主表記錄的同時將對應的前三行日誌的操作型別、操作時間、操作remark作為9列顯示
--建立測試表,初始化資料
create table test_main(
id number,
no varchar2(200)
);create table test_main_log(
log_id number,
id number,
opr_type varchar2(2),
no varchar2(200),
opr_date date,
remark varchar2(4000)
);declare i number;j number;
begin
i:=1;
j:=1;
loop
insert into test_main values(j,to_char(sysdate,'yyyymmdd')||j);
insert into test_main_log values(i,j,0,to_char(sysdate,'yyyymmdd')||j,sysdate-10,'test');
i:=i+1;
insert into test_main_log values(i,j,1,to_char(sysdate,'yyyymmdd')||j,sysdate-9,'test');
i:=i+1;
insert into test_main_log values(i,j,2,to_char(sysdate,'yyyymmdd')||j,sysdate-8,'test');
i:=i+1;
insert into test_main_log values(i,j,3,to_char(sysdate,'yyyymmdd')||j,sysdate-7,'test');
i:=i+1;
j:=j+1;
commit;
exit when i>200;
end loop;
end;
--查詢sql
select t.id,
max(t.no) as no,
max(case row_idx
when 1 then
decode(log_.opr_type,
0,'操作型別1',
1,'操作型別2',
2,'操作型別3')
else
null
end) opr_type_1,
max(case row_idx
when 1 then
log_.opr_date
else
null
end) opr_date_1,
max(case row_idx
when 1 then
log_.remark
else
null
end) opr_remark_1,
max(case row_idx
when 2 then
decode(log_.opr_type,
0,'操作型別1',
1,'操作型別2',
2,'操作型別3')
else
null
end) opr_type_2,
max(case row_idx
when 2 then
log_.opr_date
else
null
end) opr_date_2,
max(case row_idx
when 2 then
log_.remark
else
null
end) opr_remark_2,
max(case row_idx
when 3 then
decode(log_.opr_type,
0,'操作型別1',
1,'操作型別2',
2,'操作型別3')
else
null
end) opr_type_3,
max(case row_idx
when 3 then
log_.opr_date
else
null
end) opr_date_3,
max(case row_idx
when 3 then
log_.remark
else
null
end) opr_remark_3
from (select count(log.log_id) -- 利用分析函式算出當前日誌行屬於主表的記錄的第幾行日誌
over(partition by log.id
order by log.opr_date
rows between unbounded preceding and current row) row_idx,
log.*
from test_main_log log) log_,
test_main t
where t.id = log_.id(+)
group by t.id
order by t.id
shell指令碼實現檢視tomcat日誌
logs catalina.out,每次查個log,都得進很深的目錄,很麻煩,浪費時間。而且來來回回就幾個命令。檢視專案實時輸出的日誌 指令碼名稱 cat catalina log.sh 指令碼執行方式 sh cat catalina log.sh tomcat 8108 bin bash tail...
ORACLE 多種方法實現查詢
本次要說明的題目是 求各個部門的最高工資的最低工資的 員工最低工資 方法一 利用先用order by 後用rownum 擷取行數獲取 方法二 一步一步進行條件的篩選後,表之間的連線查詢,最後分組 方法三 利用子查詢,同樣是表的一步步條件篩選,只不過是用在子查詢這裡,同樣最後分組 個人推薦用方法二比較...
linux中find與rm實現查詢並刪除目錄或檔案
linux 下用find命令查詢檔案,rm命令刪除檔案。刪除指定目錄下指定檔案 find 要查詢的目錄名 name svn xargs rm rf 刪除指定名稱的檔案或資料夾 find type d grep svn xargs rm r 分析 find type d grep svn 通過此命令查...