Sql 一列中具有相同值的多行
您好,我有以下情况的问题。 我有一个表“应用程序日志”作为Sql 一列中具有相同值的多行,sql,plsql,oracle11g,Sql,Plsql,Oracle11g,您好,我有以下情况的问题。 我有一个表“应用程序日志”作为 我必须找到一个应用程序名称的“n”相应失败状态,并将其作为结果返回。例如,如果n=5,我的查询必须返回app_name=Application 3。以下查询在SQL Server中工作。我看不出它为什么不能在Oracle中工作: SELECT [App_name] FROM ( SELECT [App_name], [date], [status], ROW_NUMBER() OVER (PARTITION B
我必须找到一个应用程序名称的“n”相应失败状态,并将其作为结果返回。例如,如果n=5,我的查询必须返回app_name=Application 3。以下查询在SQL Server中工作。我看不出它为什么不能在Oracle中工作:
SELECT [App_name]
FROM (
SELECT [App_name], [date], [status],
ROW_NUMBER() OVER (PARTITION BY App_name ORDER BY [date])
-
ROW_NUMBER() OVER (PARTITION BY App_name,
CASE
WHEN status = 'FAILED' THEN 1
ELSE 2
END
ORDER BY [date]) AS grp
FROM ApplicationLog) AS t
WHERE status = 'FAILED'
GROUP BY [App_name], grp
HAVING COUNT(*) >= 5
以下查询在SQL Server中工作。我看不出它为什么不能在Oracle中工作:
SELECT [App_name]
FROM (
SELECT [App_name], [date], [status],
ROW_NUMBER() OVER (PARTITION BY App_name ORDER BY [date])
-
ROW_NUMBER() OVER (PARTITION BY App_name,
CASE
WHEN status = 'FAILED' THEN 1
ELSE 2
END
ORDER BY [date]) AS grp
FROM ApplicationLog) AS t
WHERE status = 'FAILED'
GROUP BY [App_name], grp
HAVING COUNT(*) >= 5
这是另一种仅利用单个OLAP功能的方法:
SELECT App_name, Max(date) AS LastFail
FROM
(
SELECT App_name, date, status,
-- check if the last 5 rows only contain FAILED
Min(CASE WHEN status = 'FAILED' THEN 1 ELSE 0 end)
Over (PARTITION BY App_name
ORDER BY date
-- caution, as this includes the current row it must be n-1
ROWS 4 Preceding) AS x
FROM ApplicationLog
) AS t
WHERE x = 1
GROUP BY App_name
这是仅使用单个OLAP功能的另一种方法:
SELECT App_name, Max(date) AS LastFail
FROM
(
SELECT App_name, date, status,
-- check if the last 5 rows only contain FAILED
Min(CASE WHEN status = 'FAILED' THEN 1 ELSE 0 end)
Over (PARTITION BY App_name
ORDER BY date
-- caution, as this includes the current row it must be n-1
ROWS 4 Preceding) AS x
FROM ApplicationLog
) AS t
WHERE x = 1
GROUP BY App_name
您的问题不清楚应用程序3在{0,1,2,3,4}中的
n是否也失败?在{0,1,2,3,4}中的n是否也失败?您的问题不清楚应用程序3在{0,1,2,3,4}中的n是否也失败?在{0,1,2,3,4}中的n是否也失败?