- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
+------------+---------------+---------------+----------------+
| Product ID | Part Sequence | Part Material | Description |
+------------+---------------+---------------+----------------+
| 1 | 1 | Steel | Part A |
| 1 | 2 | CFK | Part B |
| 1 | 3 | CFK | Part B Variant |
| 1 | 4 | Steel | Part C |
| 1 | 5 | GFK | Part D |
| 1 | 6 | Plastic | Part E |
| 2 | 1 | Steel | Part A |
| 2 | 2 | CFK | Part B |
| 2 | 3 | Steel | Part F |
| 2 | 4 | CFK | Part B |
| 2 | 5 | Steel | Part G |
| 2 | 6 | Silicon | Part D+ |
| 2 | 7 | Plastic | Part E |
+------------+---------------+---------------+----------------+
(按产品ID和零件顺序排序只是为了可读性,我的数据库表是无序的)
我需要查询每个产品 ID 的所有行,其中零件序列等于或高于最后一个钢零件。
所以对于上面的表格,预期结果是:
+------------+---------------+---------------+----------------+
| Product ID | Part Sequence | Part Material | Description |
+------------+---------------+---------------+----------------+
| 1 | 4 | Steel | Part C |
| 1 | 5 | GFK | Part D |
| 1 | 6 | Plastic | Part E |
| 2 | 5 | Steel | Part G |
| 2 | 6 | Silicon | Part D+ |
| 2 | 7 | Plastic | Part E |
+------------+---------------+---------------+----------------+
我可以使用 SQL Select only rows with Max Value on a Column FILTERED by Column 中的解决方案找到最后一个钢零件,然后过滤具有更高零件序列的任何东西,但我希望有一个更有效的解决方案。
最佳答案
使用窗口聚合函数(只需要遍历表一次)而不是使用连接(需要遍历表两次):
[它还将返回没有钢部件的产品 - 如果这是一个问题,则可以使用类似的窗口查询来过滤掉这些行。]
Oracle 11g R2 架构设置:
CREATE TABLE TEST ( Product_ID, Part_Sequence, Part_Material, Description ) AS
SELECT 1, 1, 'Steel', 'Part A' FROM DUAL
UNION ALL SELECT 1, 2, 'CFK', 'Part B' FROM DUAL
UNION ALL SELECT 1, 3, 'CFK', 'Part B Variant' FROM DUAL
UNION ALL SELECT 1, 4, 'Steel', 'Part C' FROM DUAL
UNION ALL SELECT 1, 5, 'GFK', 'Part D' FROM DUAL
UNION ALL SELECT 1, 6, 'Plastic', 'Part E' FROM DUAL
UNION ALL SELECT 2, 1, 'Steel', 'Part A' FROM DUAL
UNION ALL SELECT 2, 2, 'CFK', 'Part B' FROM DUAL
UNION ALL SELECT 2, 3, 'Steel', 'Part F' FROM DUAL
UNION ALL SELECT 2, 4, 'CFK', 'Part B' FROM DUAL
UNION ALL SELECT 2, 5, 'Steel', 'Part G' FROM DUAL
UNION ALL SELECT 2, 6, 'Silicon', 'Part D+' FROM DUAL
UNION ALL SELECT 2, 7, 'Plastic', 'Part E' FROM DUAL
UNION ALL SELECT 3, 1, 'Silicon', 'Part A' FROM DUAL
UNION ALL SELECT 3, 2, 'Plastic', 'Part B' FROM DUAL;
查询 1:
SELECT Product_ID,
Part_Sequence,
Part_Material,
Description
FROM (
SELECT t.*,
COALESCE(
SUM( CASE Part_Material WHEN 'Steel' THEN 1 ELSE 0 END )
OVER ( PARTITION BY Product_ID
ORDER BY Part_Sequence
ROWS BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING ),
0
) AS isInvalid
FROM TEST t
)
WHERE isInvalid = 0
Results :
| PRODUCT_ID | PART_SEQUENCE | PART_MATERIAL | DESCRIPTION |
|------------|---------------|---------------|-------------|
| 1 | 4 | Steel | Part C |
| 1 | 5 | GFK | Part D |
| 1 | 6 | Plastic | Part E |
| 2 | 5 | Steel | Part G |
| 2 | 6 | Silicon | Part D+ |
| 2 | 7 | Plastic | Part E |
| 3 | 1 | Silicon | Part A |
| 3 | 2 | Plastic | Part B |
关于SQL - 选择值大于 id 和类别最大值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31042718/
我有一个像 [3,10,4,3,9,15,6,13] 这样的列表,我想找到两个不重叠的系列/序列给出通过取最大-最小值可获得的最大值.它们必须是连续的,因此您不能从 1 中减去项目 3。但是您可以从
我正在尝试创建顶部列,这是几个列行的最大值。 Pandas 有一个方法 nlargest但我无法让它成行工作。 Pandas 也有 max和 idxmax这正是我想做的,但仅限于绝对最大值。 df =
我在使用 Android 时遇到了一点问题。 我有我的 GPS 位置,明确的经纬度,以及以米为单位的搜索射线(例如 100 米),可以吗? 想象一下我在射线形成的圆心的位置,我会知道如何在 Andro
假设我有一组最小值和最大值。我想要一个数据结构,在给定外部值的情况下,它会最有效地为我提供值 >= 最小值、值 = 最小值和值 <= 最大值?,我们在Stack Overflow上找到一个类似的问题:
我有以下 Maxima 代码: m:sum(x[i],i,1,N)/N; 然后我想计算 $m^2$。 m2:m^2, sumexpand; 然后我得到双重求和: sum(sum(x[i1]*x[i2]
如何从嵌套字典中获取一个值的最小值/最大值,该字典的缺失值也包含“Nan”? *这是供引用,我找到了一个解决方案,我想我应该在这里分享它,因为我在 stackoverflow 上的任何地方都找不到答案
在千里马 12.04.0 我有一个总和 mysum : sum(u[i]^2, i, 1, N); 现在我区分它 diff(mysum, u[i]); 现在我指定一个定义的索引 i=A 来区分它 at
是否可以根据时间轴获取最小和最大时间戳?我将在 parking 场示例中进行解释。 +---------------------+------+--------+-------+-----------
基本上在几个领域有几个日期 SELECT MAX(MAX(DATE_A),MAX(DATE_B)) from table DATE_A 和 DATE_B 是日期,我基本上想要日期 A 或日期 B 的最
我创建了一个小测试,其中一个 div 根据滚动深度滑动。 我只是想知道怎么设置 A) 起点 (scrolltop = x something) B) 如何设置最大值? var pxlCount = 0
由于达到最大值,clock_gettime() 何时会使用 CLOCK_MONOTONIC 返回一个较小的值?我不是指被描述为错误的小扭曲,而是类似于计数器重置的东西。 它是时间测量的,还是与滴答的绝
我正在使用 angularjs,尤其是 $timeout 服务(setTimeout 的包装器)。它的工作原理如下: angular.module('MyApp').controller('MyCo
是否有可能获得 MinValue - 或 MaxValue未知的 T 型?如 Int其中有 Int.MinValue和 Int.MaxValue ?? 谢谢 最佳答案 正如@mpilquist 在上面
我的数据为 员工: id Name -------- 1 xyz 2 abc 3 qaz Employee_A:(Eid - 员工表,title - 职称表) eid active
我有一个日期和时间行列表,每天有多行。 对于每个唯一日期,我想获取最小和最大时间值。 如何在 Excel v10(又名 2002)中执行此操作? 最佳答案 首先,您可以使用 Excel 函数 MIN(
我有以下 SQL 表 - Date StoreNo Sales 23/4 34 4323.00 23/4 23 5
我可能错过了一些微不足道的东西。我想我还没有完全理解一些基本的交叉过滤器概念 无论如何,我创建了一个带有几个维度的交叉过滤器,并在维度上使用过滤器。我现在想知道过滤值(不是键)的最小值/最大值。 我将
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
我在这里错过了什么吗?我希望以下代码段中的 np.max 会返回 [0, 4] ... >>> a array([[1, 2], [0, 4]]) >>> np.max(a,
给定大小为 2 的列表列表,我试图找到通过索引确定最小/最大值的最快方法。目标是确定一系列 XY 点的边界/范围。 子列表未排序(按一个索引排序并不能保证另一个索引已排序)。 目前我正在做以下事情:
我是一名优秀的程序员,十分优秀!