我正在寻找一个看似非常简单的 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”产生了完全不同的顺序。
我想要的: …
oracle ×1