是否可以允许不同但仅适用于 2 个值?
Is it possible to allow distinct but for 2 values only?
我有一个我无法解决的问题,或者想不出任何可以帮助我的问题。
下面的示例输出。
在 Column4 中有 3 种类型的值 3 个 Random number1 和 3 个 Random number2 ...等。
我的目标是在 column4 中仅显示该值的 2 种类型。在这个例子中带有“*”标记的行。
这样我就得到了 6 行数据。
但是 column4 的值是完全随机的。
也许我得到 10000 行,其中只有 700 行是唯一的,其余的是第 4 列中那 700 行的重复。
我可能过于简化了这个选择,但这对我来说很容易理解整个事情。
I have this:
UN_ID_DATE UN_ID OBJ Task Random_ID
------------------- ------- -------------- ------------------------------- -------
2021-02-24 10:33:24 157 Elol Einschlcsse 9999999
2021-02-24 10:24:59 191 Biva Polierstelle 4444444
2021-02-24 10:23:38 185 oldal Karobau Schleifstelle 4444444
2021-02-24 10:23:26 173 Tuf Delle 2222222
2021-02-24 10:20:06 173 Tuf Delle 3333333
2021-02-24 10:18:22 191 Biva Polierstelle 9999999
2021-02-24 10:16:29 185 oldal Kratzer 9999999
Goal:
UN_ID_DATE UN_ID OBJ Task Random_ID
------------------- ------- -------------- ------------------------------- -------
2021-02-24 10:33:24 157 Elol Einschlcsse 9999999
2021-02-24 10:18:22 191 Biva Polierstelle 9999999
2021-02-24 10:16:29 185 oldal Kratzer 9999999
2021-02-24 10:24:59 191 Biva Polierstelle 4444444
2021-02-24 10:23:38 185 oldal Karobau Schleifstelle 4444444
在所需的数据集中,所有 Random_ID 与前两个相似但不同。所以 999999 和 4444444 是不同的,所以我需要所有带有 Random_ID 9999999 和 4444444 的行,这是 5 行。这是按 DATE 订购的,此日期属于 UN_ID。
提前谢谢你们! :)
有一个方便的 OLAP 函数 DENSE_RANK
您可以使用它。
试试这个,取消注释行:
WITH MYTAB (RANDOM_ID) AS
(
VALUES
9999999
, 4444444
, 4444444
, 2222222
, 3333333
, 9999999
, 9999999
)
SELECT *
FROM
(
SELECT T.*, DENSE_RANK() OVER (ORDER BY RANDOM_ID DESC) RN_
FROM MYTAB T
)
--WHERE RN_ <= 2
;
结果是:
|RANDOM_ID|RN_|
|---------|---|
|9999999 |1 |
|9999999 |1 |
|9999999 |1 |
|4444444 |2 |
|4444444 |2 |
|3333333 |3 |
|2222222 |4 |
我有一个我无法解决的问题,或者想不出任何可以帮助我的问题。 下面的示例输出。 在 Column4 中有 3 种类型的值 3 个 Random number1 和 3 个 Random number2 ...等。 我的目标是在 column4 中仅显示该值的 2 种类型。在这个例子中带有“*”标记的行。 这样我就得到了 6 行数据。 但是 column4 的值是完全随机的。 也许我得到 10000 行,其中只有 700 行是唯一的,其余的是第 4 列中那 700 行的重复。 我可能过于简化了这个选择,但这对我来说很容易理解整个事情。
I have this:
UN_ID_DATE UN_ID OBJ Task Random_ID
------------------- ------- -------------- ------------------------------- -------
2021-02-24 10:33:24 157 Elol Einschlcsse 9999999
2021-02-24 10:24:59 191 Biva Polierstelle 4444444
2021-02-24 10:23:38 185 oldal Karobau Schleifstelle 4444444
2021-02-24 10:23:26 173 Tuf Delle 2222222
2021-02-24 10:20:06 173 Tuf Delle 3333333
2021-02-24 10:18:22 191 Biva Polierstelle 9999999
2021-02-24 10:16:29 185 oldal Kratzer 9999999
Goal:
UN_ID_DATE UN_ID OBJ Task Random_ID
------------------- ------- -------------- ------------------------------- -------
2021-02-24 10:33:24 157 Elol Einschlcsse 9999999
2021-02-24 10:18:22 191 Biva Polierstelle 9999999
2021-02-24 10:16:29 185 oldal Kratzer 9999999
2021-02-24 10:24:59 191 Biva Polierstelle 4444444
2021-02-24 10:23:38 185 oldal Karobau Schleifstelle 4444444
在所需的数据集中,所有 Random_ID 与前两个相似但不同。所以 999999 和 4444444 是不同的,所以我需要所有带有 Random_ID 9999999 和 4444444 的行,这是 5 行。这是按 DATE 订购的,此日期属于 UN_ID。
提前谢谢你们! :)
有一个方便的 OLAP 函数 DENSE_RANK
您可以使用它。
试试这个,取消注释行:
WITH MYTAB (RANDOM_ID) AS
(
VALUES
9999999
, 4444444
, 4444444
, 2222222
, 3333333
, 9999999
, 9999999
)
SELECT *
FROM
(
SELECT T.*, DENSE_RANK() OVER (ORDER BY RANDOM_ID DESC) RN_
FROM MYTAB T
)
--WHERE RN_ <= 2
;
结果是:
|RANDOM_ID|RN_|
|---------|---|
|9999999 |1 |
|9999999 |1 |
|9999999 |1 |
|4444444 |2 |
|4444444 |2 |
|3333333 |3 |
|2222222 |4 |