我正在努力完成一个查询,在这个查询中,我只需要获取那些在特定字段中具有“最小值”的行。这不太符合我对使用MIN()的理解,我希望有人能给我指出正确的方向。
我有一个联接两个表并按sort_order对结果值进行排序的查询。
CREATE TEMPORARY TABLE_TEMP_1
(
RU_LVL VARCHAR(3) NOT NULL,
SORT_ORDER SMALLINT NOT NULL
);
INSERT INTO TABLE_TEMP_1 (RU_LVL, SORT_ORDER) VALUES ('50', 1);
INSERT INTO TABLE_TEMP_1 (RU_LVL, SORT_ORDER) VALUES ('60', 2);
INSERT INTO TABLE_TEMP_1 (RU_LVL, SORT_ORDER) VALUES ('70', 3);
INSERT INTO TABLE_TEMP_1 (RU_LVL, SORT_ORDER) VALUES ('40', 4);
INSERT INTO TABLE_TEMP_1 (RU_LVL, SORT_ORDER) VALUES ('35', 5);
SELECT *
FROM R_EXPORT_RU R_EXPORT_RU
INNER JOIN TABLE_TEMP_1 TT ON TT.RU_LVL = R_EXPORT_RU.RU_LVL_ID
WHERE PER_ID = 12345
ORDER BY TT.SORT_ORDER;
您可以从该查询中看到,我正尝试为字符字段RU_LVL
引入自定义排序顺序。
这个查询可以很好地将所有数据放在一起,并且按SORT_ORDER
正确排序。但是,我实际上只想获取SORT_ORDER
值最小的行。对于某些人,该值可能是1,而对于其他人,该值可能是4。
我最初的想法是对数据进行排序,然后获取第一行,但不幸的是,在R_EXPORT_RU
表中有几行共享相同的RU_LVL_ID
值。因此,有可能获得具有相同最小排序顺序的多行,如下所示:
+----------------------------------------------------+
| PER_ID | RU_DESC | RU_LVL_ID | RU_LVL | SORT_ORDER |
+----------------------------------------------------+
| 12345 | Foo | 40 | 40 | 4 |
| 12345 | Bar | 40 | 40 | 4 |
| 12345 | Baz | 35 | 35 | 5 |
+----------------------------------------------------+
在本例中,我想要最上面的两行。不幸的是,我事先不知道SORT_ORDER
中的最小值是多少,也不知道有多少行可能与该最小值匹配。因此,我很难知道如何使用MIN()
或FETCH FIRST
函数来限制结果。
谁能给我指个方向?
谢谢你!
1条答案
按热度按时间wtzytmuj1#
我不熟悉DB2,但我在大约4分钟前刚刚回答了一个类似的问题,所以这对我来说很容易复制/粘贴。
使用SQL Generator时,我发现建议使用
QUALIFY
,但我认为这在DB2中不起作用。若要在不使用QUALIFY的情况下执行此操作,您可以尝试执行以下操作:
对于支持QUALIFY的RDBMS,