如何过滤我的表以在 Oracle 中显示结果?

Posted

技术标签:

【中文标题】如何过滤我的表以在 Oracle 中显示结果?【英文标题】:How do I filter my table to show the result in Oracle? 【发布时间】:2018-12-12 17:54:46 【问题描述】:

我有一个源表:

我需要将它映射到目标表,在该表中我会选择一个唯一的 ID 和颜色,状态值最小,形状值最大,该 ID 的状态值。例如,

【问题讨论】:

目标表在哪里? 一旦你选择了 id 然后从所有数据中选择状态值的最小值,并从所有数据中选择状态值的最大值???并插入目标表?? 如果你正在通过 id min max 那么输出到目标表是 i 1 black circle!!!!!!!!!!!!! 但是我需要该特定 ID 的最小和最大状态值,对于 ID 2 和 3,我还有两行。 是的,你是对的@nikhilsugandh 【参考方案1】:

您可以在子查询中使用Oracle Analytic Functions。无需连接。

select
r.id,
r.color,
r.shape
from
(
    select
    s.id,
    first_value(s.color) over (partition by s.id order by s.status) as color,
    first_value(s.shape) over (partition by s.id order by s.status desc) as shape,
    row_number() over (partition by s.id order by s.status) as row_index
    from shapes s
) r
where r.row_index = 1;

【讨论】:

【参考方案2】:

好的,我终于可以写下来了:

Select x.id, x.shape,y.color 
from 
     (Select id ,shape 
      from Shapes
      where status in ( Select max (status) 
                        from shapes 
                        group  by id)
        ) x 
  join 
        (Select id , color 
          from shapes 
          where status in (Select min(status) 
                           from shapes 
                           group by id )
       ) y 
on x.id = y.id;

欢迎简短回答

【讨论】:

这不会从发布的示例数据中产生您需要的输出。

以上是关于如何过滤我的表以在 Oracle 中显示结果?的主要内容,如果未能解决你的问题,请参考以下文章

在分析函数中过滤行 - Oracle

多次加入同一个表以每次使用过滤器检索不同的数据

当结果已被过滤以匹配我的日期格式(Oracle SQL)时,为啥这个 to_date 不起作用

oracle如何从函数中返回值表

SQL Big Query 完全连接表以使用相同的过滤器

Oracle:有效地使用where子句过滤时间戳列以获取特定日期的所有记录