我正在寻找一个看似非常简单的 SELECT。
我有一个日志记录表 LOGGING,其中我感兴趣的三列是:MODULE(文本)、PDATE(日期)、PTEXT(文本)。
实际上,我只关心前两列,即到底调用了哪个模块(PL/SQL 包中的过程名称)。我只需要对结果进行排序 (ASC) 的日期,也可以出于相同目的使用 ID 列,它是一个自动递增的整数值(Oracle:sequence.nextval)。
由于日志记录产生了太多的数据,单个 MODULE 有数十到数百个 PTEXT 条目,我想压缩 MODULE 行,这似乎需要一个简单的 GROUP BY。
也许这说明了这个问题:
我从下面的内部查询开始,它为我提供了正确的“模块”调用顺序,但没有聚合它们(上面的示例 1)。所以我的想法是好的,我以正确的顺序得到正确的结果 - 所以如果我现在只选择我感兴趣的一列并在这个有序(!)数据上使用“分组依据”,我应该得到我想要的 -但是在下面添加“分组依据”给了我一个完全不同的顺序。显然,我对“group by”的了解是不够的。
SELECT module FROM
(
SELECT module, pdate FROM logging
ORDER BY pdate asc
)
--GROUP BY module
Run Code Online (Sandbox Code Playgroud)
没有“GROUP BY”的结果(前 12 行):
set_option_value
set_option_value
set_option_value
set_option_value
get_rights_usecase
get_rights_usecase
get_rights_usecase
get_rights_usecase
get_rights_usecase
get_rights_usecase
get_fun_AppOptionsSingleVal
get_rights_usecase
...
Run Code Online (Sandbox Code Playgroud)
结果包括 “通过...分组”:
get_fun_AppOptionsSingleVal
get_option_value
get_parameter
get_usecase_customer
get_kungesId_FY_cusper
fill_missing_products
update_chart_budget_uc1
get_Berein
set_hierarchy
get_element_num_value
icas_dyn_create_chart_table
get_xmlTemplate
...
Run Code Online (Sandbox Code Playgroud)
正如人们所见,“GROUP BY”产生了完全不同的顺序。
我想要的:
set_option_value
get_rights_usecase
get_fun_AppOptionsSingleVal
get_rights_usecase
...
Run Code Online (Sandbox Code Playgroud)
基本上,我想要的东西可以通过获取文本输出来非常简单地实现
SELECT module FROM logging
ORDER BY pdate asc
Run Code Online (Sandbox Code Playgroud)
并通过 Unix 命令行上的“uniq”进行管道传输。现在我很好奇为什么这在 SQL 中不那么简单。
问题是您想使用pdatea 中的哪个smodule进行排序?
如果您愿意使用最大的,您可以使用:
select module from logging order by max(pdate);
Run Code Online (Sandbox Code Playgroud)
- - 编辑
我想我现在明白了——你可能想要这样的东西:
select module
from( select module,
sum(module_step) over (order by pdate rows unbounded preceding)
as batch_number,
pdate
from( select module,
case lag(module) over (order by pdate) when module then 0
else 1 end as module_step,
pdate from logging) )
group by module, batch_number
order by batch_number;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8014 次 |
| 最近记录: |