![](/img/trans.png)
[英]Oracle SQL Developer Query to return the count of 2 values from same column
[英]Oracle query to return values from column 1 for certain values in column 2
我有一個從 4 個表中獲取數據的語句。 這個 select 語句的結果將從一開始就為我提供我需要的信息。 然后我有第二個 select 語句,我想在其中過濾這些結果。
聲明看起來像這樣
WITH temp
AS (SELECT "username",
Max("session_start_time") AS "START_TIME",
"product_name"
FROM (SELECT "PPM"."ppm_logon_sessions"."session_start_time" AS
"SESSION_START_TIME",
"PPM"."ppm_logon_sessions"."username" AS
"USERNAME"
,
"PPM"."ppm_logon_sessions"."user_id"
AS "USER_ID",
"Knta User Products"."product_id" AS
"PRODUCT_ID",
"Knta User Products"."user_id" AS
"USER_ID_2",
"Knta User Products"."user_product_id" AS
"USER_PRODUCT_ID",
"Knta License Usage V"."product_name" AS
"PRODUCT_NAME"
FROM "PPM"."ppm_logon_sessions"
left join "PPM"."knta_user_products"
"Knta User Products"
ON "PPM"."ppm_logon_sessions"."user_id" =
"Knta User Products"."user_id"
left join "PPM"."knta_license_usage_v"
"Knta License Usage V"
ON "Knta User Products"."product_id" =
"Knta License Usage V"."product_id")
GROUP BY "username", "product_name")
SELECT "username", "product_name"
FROM temp
WHERE "start_time" > Trunc(Cast(SYSDATE AS TIMESTAMP)
+ Numtodsinterval(-30, 'day'), 'day')
AND "product_name" IS NOT NULL
現在這將返回一組如下所示的結果:
如果僅返回僅存在於某些產品中的用戶名,我想做什么,例如,如果我只想過濾出具有“配置”和“用戶管理”產品名稱的用戶,它應該只給我那些用戶,而不是用戶具有“配置”和“用戶管理”和“程序管理”的
您可以使用LEAD和LAG分析函數來執行此操作。
演示:
在下面的示例數據中,它只會返回僅在'Configuration', 'User Administration'
中具有產品的username
,如果其他則過濾:
with t AS
(
select 'mat_m' username, 'Configuration' product_name from dual
union all
select 'mat_m' username, 'Program Management' product_name from dual
union all
select 'mat_m' username, 'Project Management' product_name from dual
union all
select 'nel_d' username, 'User Administration' product_name from dual
union all
select 'nel_d' username, 'Program Management' product_name from dual
union all
select 'nel_d' username, 'Portfolio Management' product_name from dual
union all
select 'puth_a' username, 'Configuration' product_name from dual
union all
select 'puth_a' username, 'User Administration' product_name from dual
)
SELECT username, product_name
FROM(
SELECT username,
product_name,
lead(product_name) over(partition by username order by product_name) lead,
lag(product_name) over(partition by username order by product_name) lag
FROM t
)
WHERE product_name IN ('Configuration', 'User Administration')
AND
(
lag IN ('Configuration', 'User Administration')
OR
lead IN ('Configuration', 'User Administration')
);
Output:
USERNAME PRODUCT_NAME
-------- --------------------
puth_a Configuration
puth_a User Administration
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.