在上一篇文章中,已经有人帮助了我,并帮助我创建了该选择项,最多返回1条记录。 festpae_id
SELECT *
FROM
(
SELECT discount, osp_id, sero_id, estpt_id,
ROW_NUMBER() OVER
(PARTITION BY osp_id, sero_id, estpt_id ORDER BY festpae_id DESC) as festpae_id
FROM database1 data1
JOIN database2 data2 ON data2.id = data1.attr_id
WHERE data1.interest_rate = 1
AND data1.ordet_id = data2.id
AND data1.objt_attr_id = data2.objt_attr_id
)
WHERE festpae_id = 1
记录:
DISCOUNT OSP_ID SERO_ID ESTPT_ID FESTPAE_ID VALUE
---------- ---------- ---------- ---------- ---------- ----------
50 619356 3931831 2144 NULL 0
40 619356 3931831 2144 NULL 1
30 619356 3931831 2144 2000743 0
15 619356 3931831 2144 2000744 1
因此,从该选择中,我将获得此记录
DISCOUNT OSP_ID SERO_ID ESTPT_ID FESTPAE_ID VALUE
---------- ---------- ---------- ---------- ---------- ----------
50 619356 3931831 2144 NULL 0
目前,我有更多的条件应该检查女巫,并且头脑已经崩溃,再加上我的先知知识还不够好。
那我需要什么?如您所见,有2列称为value
和festpae_id
。必须将它们纳入条件。
festpae_id is NULL
,那么他应该检查所有记录在哪里festpae_id is NULL
,value = 1
然后返回记录(如果存在)。festpae_id is null
,那么select应该返回记录MAX(festpae_id)
(在这种情况下使用ROW_NUMBER())和where value = 1
。我知道,可以通过完成此操作DECODE()
,但是接下来我需要复制粘贴该女巫的代码是不正确的。也许你们当中的某人会如此友善并分享他对解决方案的想法?现在至少要进行5个小时的工作,却找不到方法。
PS此选择在视图表中用作LEFT OUTER JOIN
。
只需调整order by
并添加value = 1
到WHERE
:
(PARTITION BY osp_id, sero_id, estpt_id
ORDER BY (CASE WHEN festpae_id IS NULL
THEN 1 ELSE 2
END),
festpae_id DESC
) as festpae_id
和:
WHERE data1.interest_rate AND value = 1
您还可以添加WHERE
条件并将其简化ORDER BY
为ORDER BY testpae_id DESC NULLS FIRST
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句