我将简化我在这里寻找的内容。
我有一个表,用于存储资产名称,日期(每天运行的作业)以及一个值为1或0的值,用于指示资产是否不合规。 我需要获得值为0的最早日期。
我遇到的问题是问题可能是间歇性的,因此同一资产可能会显示为合规,然后输出,然后再显示。我想要检索最不合规的日期这次。
Asset Date Compliant
NAME 2-FEB-18 0
NAME 1-FEB-18 0
NAME 31-JAN-18 1
NAME 30-JAN-18 0
在这个例子中,我想要检索1-FEB-18,而不是30-JAN-18。
我使用子查询进入临时表,检索将返回30-JAN-18的MIN(日期)。想法?
匿名当前子查询:
least_recent_created AS
(
SELECT t.date,t.ASSET, t.DATABASE_NAME FROM table t
WHERE t.date =
(
SELECT MIN(date)
FROM table2 t2
WHERE t.ASSET_ID = t2.ASSET_ID
AND t.DATABASE_NAME = t2.DATABASE_NAME
AND t2.compliant = 0
)
)
答案 0 :(得分:0)
您希望自上次合规以来最早的不合规日期。如果资产从未符合规定,我认为您需要最早的日期。
select t.asset, min(date)
from (select t.*,
max(case when t.complaint = 1 then date end) over (partition by asset) as max_compliant1_date
from t
) t
where complaint = 0 and
(date > max_complaint1_date or max_complaint1_date is null)
group by t.asset;
答案 1 :(得分:0)
您可以使用以下查询:
SELECT "Asset", MAX("Date")
FROM (
SELECT "Asset", "Date", "Compliant",
CASE
WHEN "Compliant" = 0 AND
LAG("Compliant") OVER (PARTITION BY "Asset"
ORDER BY "Date") = 1 THEN "Date"
END AS OutOfComplianceDate
FROM mytable) t
WHERE OutOfComplianceDate IS NOT NULL
GROUP BY "Asset"
内部查询标识“不合规”'日期,即当前记录为"Compliant" = 0
的日期,而紧接在前的记录为"Compliant" = 1
。
外部查询返回最新的“不合规”信息。每"Asset"
日期。