【问题标题】:First and Last value ORACLE第一个和最后一个值 ORACLE
【发布时间】:2014-02-12 14:31:07
【问题描述】:

尝试在 Oracle 8i 中获得此输出:

    column1 |time
    ________|_______
      ABC   | 00:00:01
      END   | 00:00:03
      123   | 00:00:04
      END   | 00:00:07

来自另一个查询的输出

   column1 |time
    ________|_______
      ABC   | 00:00:01
      ABC   | 00:00:02
      ABC   | 00:00:03
      123   | 00:00:04
      123   | 00:00:05
      123   | 00:00:06
      123   | 00:00:07

我可以在这里使用“first”或“last”的任何命令吗[比如在 XPath 中]?尝试 GROUP BY 但它不能正常工作:(

谢谢!

【问题讨论】:

  • 您为什么使用 Oracle 8?这在十多年前就已经过时了。
  • 第 1 列的分组和最大和最小时间
  • @Gordon 这个 Db 在我从中获取数据后将不再存在 :)

标签: sql oracle


【解决方案1】:

您可以将其放在两列中,这将是更自然的方法:

select column1, min(time) as firsttime, max(time) as lasttime
from t
group by column1;

你真的想要四行输出,END 在两行上不知道结束的内容吗?

编辑:

要得到你想要的输出:

select (case when n.n = 1 then column1 else 'END' end) as column1,
       (case when n.n = 1 then firsttime else lasttime end) as "time"
from (select column1, min(time) as firsttime, max(time) as lasttime
      from t
      group by column1
     ) t cross join
     (select 1 as n from dual union all select 2 from dual) n
order by column1, n.n;

注意order by 子句。结果不保证按任何特定顺序排列,排序对于理解这些结果很重要。

【讨论】:

  • 是的,我想用字符串 'END' 的值替换每个值的最后一个值。这很奇怪,但这是我需要将此查询与另一个软件集成的要求:)
  • 我正在尝试从表 t 中的其他列中获取值,但出现错误。我会问另一个问题:)
  • 重点:结果是有序的。例如,我可以有 5 个“123”,然后是 3 个“ABC”,然后是 10 个“123”。在这种情况下,我需要三个组的开始和结束。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
相关资源
最近更新 更多