- 此问题在此处已有答案**:
Get top results for each group (in Oracle)(5个答案)
First two salaries in each department [duplicate](3个答案)
Limit SQL query to only the top two counts per group [duplicate](1个答案)
How to extract the first 5 rows for each id user in Oracle? [duplicate](2个答案)
Select top 15 records from each group [duplicate](2个答案)
23小时前关门了。
我有一个包含三个字段的表
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
先谢了。
2条答案
按热度按时间polkgigr1#
样本数据:
一般来说,一个选项是按 * something * 对 * 行进行 * 排序 *-在我的示例中,它是按升序对每个
material
x x x x列进行排序的,因此第1行和第2行具有以下rn
值:1
和2
-然后获取排名最高的两行。您所需的输出显示,您实际上需要两行,就像您实际写入的那样,但是-这令人怀疑,因为
material = 1
不是2020 - 07就是2020 - 05(如果按降序排序),或者2020 - 03和2020 - 04(如果按升序排序)。如果没有其他列可以让我们计算出这样的输出(您指定的那个),那么您就不走运了。另一方面,如果您想要的输出是错误的,那么修复
order by
子句(第3行),让查询返回您需要的值(前2行或后2行)。wtzytmuj2#
您可以使用
ROW_NUMBER()
(* 通过该函数,您将严格地为每个匹配选择两个,即使出现平局 *)之类的分析函数,如下所示在基于所需输出按
month_year
列的值降序排序之后。