sql - 甲骨文 11g : only return a value if row is first or last in group

标签 sql oracle oracle11g

我正在尝试从 Oracle 查询创建报告。数据是这样的:

GROUP_ID | COUNT_1 | COUNT_2
    1    |   100   |   123
    1    |   101   |   123
    1    |   283   |   342
    1    |   134   |   123
    2    |   241   |   432
    2    |   321   |   920
    2    |   432   |   121
    2    |   135   |   342

我想要做的是仅在组中的第一个时返回 GROUP_ID,并且在组中的最后一个时返回一些其他值,例如
GROUP_ID | COUNT_1 | COUNT_2
    1    |   100   |   123
         |   101   |   123
         |   283   |   342
   last  |   134   |   123
    2    |   241   |   432
         |   321   |   920
         |   432   |   121
   last  |   135   |   342

这可能吗?

谢谢!

最佳答案

未测试,但这应该是想法。如果您需要按 COUNT_1 或 COUNT_2 排序,则应将其包含在分析函数的 over 中。条款,partition by GROUP_ID order by COUNT_1
引用 here了解什么是解析函数。

select
  case when ROW_NUMBER = 1 then GROUP_ID
       when ROW_NUMBER = GROUP_COUNT then 'last'
       else NULL
  end GROUP_ID
  ,COUNT_1
  ,COUNT_2
from(
    select
      GROUP_ID
      ,COUNT_1
      ,COUNT_2
      ,row_number() over(partition by GROUP_ID) ROWNUMBER
      ,count(GROUP_ID) over (partition by GROUP_ID) GROUP_COUNT
    from
      FOO
)

关于sql - 甲骨文 11g : only return a value if row is first or last in group,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17085347/

相关文章:

sql - 如何在sql中链接where和where not in?

MySQL 查询根据年/月/日获取记录列表

java - 在应用程序崩溃之前获得时间

sql - 为什么这个 Oracle 查询不起作用?

sql - HSQLDB/Oracle - IN 子句中超过 1000 项

mysql - 一个 RTT 中包含多个 SQL 命令?

sql - 在执行其他类型聚合时获得最高类别

sql - 是否可以将变量传递给 SQL/DDL 脚本?

用于解决数据库中的传递依赖项的 SQL 查询

c - 使用Visual Studio用Oracle 11g开发C程序,但我不知道如何一起设置所有程序