使用 Oracle SQL 的子查询
Posted
技术标签:
【中文标题】使用 Oracle SQL 的子查询【英文标题】:Subquery using Oracle SQL 【发布时间】:2017-06-08 01:10:40 【问题描述】:我正在尝试编写一个查询,其中不包括具有三个相同日期值的meter_nos,即。 1-3 关系。
查询只能显示具有不同日期的meter_nos,即1-1关系。
有人可以帮忙吗?我被卡住了
下面是一个示例:
...and a.mtr_id in (select b.mtr_id
from ci_mtr_config b
where a.mtr_id=b.mtr_id
group by b.mtr_id
having count(b.mtr_id)=3)
and a.mtr_id not in (select f.eff_dttm
from ci_mtr_config f
where a.mtr_id=f.mtr_id
group by f.eff_dttm
having count(f.eff_dttm)=3)
这不起作用。
【问题讨论】:
编辑您的问题并提供示例数据、所需结果以及您尝试过的代码。 如果您阅读以下内容,您将获得更快的答案:***.com/help/mcve(并遵循上面的建议) 【参考方案1】:尝试使用 COUNT(*) OVER(PARTITION BY ....) 来计算共享相同仪表和日期的行数。然后按该计算过滤。
CREATE TABLE CI_MTR_CONFIG
(MTR_ID INT, EFF_DTTM DATE)
;
INSERT INTO CI_MTR_CONFIG
(MTR_ID, EFF_DTTM)
VALUES
(303, to_date('2017-01-01','yyyy-mm-dd')),
(303, to_date('2017-01-01','yyyy-mm-dd')),
(303, to_date('2017-01-01','yyyy-mm-dd')),
(202, to_date('2017-01-01','yyyy-mm-dd')),
(202, to_date('2017-01-01','yyyy-mm-dd')),
(101, to_date('2017-01-01','yyyy-mm-dd'))
;
select
*
from (
select
*, count(*) over(partition by MTR_ID, EFF_DTTM) as count_of
from CI_MTR_CONFIG
) d
where count_of = 1
上面的示例数据只会返回仪表 101。
注意 EFF_DTTM 信息是否比日常使用 TRUNC() 更准确
count(*) over(partition by MTR_ID, TRUNC(EFF_DTTM)) as count_of
【讨论】:
如何在主查询中显示 count_of =1,它不起作用@used_by_already 在 srkect 子句中包含 count_of。如果查询不起作用,则说明您没有正确实现它。再检查一遍。 顺便说一句,“不工作”和“不满足我的需求”是有区别的。对我不起作用说它会产生错误,因此您没有正确实施。示例查询运行没有错误。 mmm,如果您确实希望结果中出现 'count_of =1',请在顶部选择子句中使用 select 'count_of =1' as x,其中 x 是您的标题提供该列以上是关于使用 Oracle SQL 的子查询的主要内容,如果未能解决你的问题,请参考以下文章