【问题标题】:Oracle DB dynamic returned value based on IDOracle DB 根据ID 动态返回值
【发布时间】:2023-02-02 15:57:07
【问题描述】:

我有一个包含三个字段的表

Material QTY MONTH_YEAR
1 , 1 2020-07
1 , 2 2020-04
1 , 2 2020-03
1 , 2 2020-05
2 , 3 2020-10
2 , 4 ,2020-08
2 , 4 ,2020-08
3 , 4 ,2021-08
3 , 4 ,2021-08
3 , 4 ,2020-08
3 , 4 ,2020-08
3 , 4 ,2019-08

我想要实现的是返回不同材料编号的前两条记录。

输出

Material QTY MONTH_YEAR
1 , 1 2020-07
1 , 2 2020-04
2 , 3 2020-10
2 , 4 ,2020-08
3 , 4 ,2021-08
3 , 4 ,2021-0

提前致谢。

【问题讨论】:

  • 每种材料的前两行?但是 2020-07 和 2020-04 不是材料 1 的第一行。2020-03 和 2020-04 是最早的。或者你对“第一”的定义是什么?

标签: sql database oracle sql-limit


【解决方案1】:

您可以使用解析函数,例如ROW_NUMBER(),如下所示

SELECT Material, qty, month_year
  FROM(
       SELECT ROW_NUMBER() OVER (PARTITION BY Material ORDER BY month_year DESC) AS rn,
              t.*
         FROM t
      ) 
 WHERE rn <= 2     

【讨论】:

    猜你喜欢
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 2021-01-27
    • 2018-04-08
    • 2017-03-24
    • 2021-10-04
    相关资源
    最近更新 更多