Teradata SQL 比较组的值是否相似
Teradata SQL Compare Values for Group if it similar or not
我有一个数据 table 如下所示,我需要比较每个 CustomerID
的 OfferID
是否相似或不同。我试图通过
得到它
CASE
WHEN (COUNT (DISTINCT OfferID) OVER (PARTITION BY CustomerID)) = 1 THEN 'SAME_OFFER'
ELSE 'DIFFERENT_OFFER'
END AS STATUS
但 COUNT DISTINCT
似乎不能用作 window 函数
|CustomerID|EffectiveDate|OfferID|
|----------+-------------+-------|
|123 |1-Jan-2021 |111 |
|123 |2-Jan-2021 |111 |
|123 |3-Jan-2021 |111 |
|133 |1-Jan-2021 |222 |
|133 |2-Jan-2021 |333 |
|144 |1-Jan-2021 |222 |
|144 |2-Jan-2021 |222 |
|144 |3-Jan-2021 |333 |
|144 |4-Jan-2021 |333 |
所需的输出如下
|CustomerID|EffectiveDate|OfferID|Status |
|----------+-------------+-------+---------------|
|123 |1-Jan-2021 |111 |Same_Offer |
|123 |2-Jan-2021 |111 |Same_Offer |
|123 |3-Jan-2021 |111 |Same_Offer |
|133 |1-Jan-2021 |222 |DIFFERENT_OFFER|
|133 |2-Jan-2021 |333 |DIFFERENT_OFFER|
|144 |1-Jan-2021 |222 |DIFFERENT_OFFER|
|144 |2-Jan-2021 |222 |DIFFERENT_OFFER|
|144 |3-Jan-2021 |333 |DIFFERENT_OFFER|
|144 |4-Jan-2021 |333 |DIFFERENT_OFFER|
我建议 min()
和 max()
:
select t.*,
(case when min(offerid) over (partition by customerid) = max(offerid) over (partition by customerid)
then 'SAME_OFFER' else 'DIFFERENT_OFFER'
end) as status
from t
我有一个数据 table 如下所示,我需要比较每个 CustomerID
的 OfferID
是否相似或不同。我试图通过
CASE
WHEN (COUNT (DISTINCT OfferID) OVER (PARTITION BY CustomerID)) = 1 THEN 'SAME_OFFER'
ELSE 'DIFFERENT_OFFER'
END AS STATUS
但 COUNT DISTINCT
似乎不能用作 window 函数
|CustomerID|EffectiveDate|OfferID|
|----------+-------------+-------|
|123 |1-Jan-2021 |111 |
|123 |2-Jan-2021 |111 |
|123 |3-Jan-2021 |111 |
|133 |1-Jan-2021 |222 |
|133 |2-Jan-2021 |333 |
|144 |1-Jan-2021 |222 |
|144 |2-Jan-2021 |222 |
|144 |3-Jan-2021 |333 |
|144 |4-Jan-2021 |333 |
所需的输出如下
|CustomerID|EffectiveDate|OfferID|Status |
|----------+-------------+-------+---------------|
|123 |1-Jan-2021 |111 |Same_Offer |
|123 |2-Jan-2021 |111 |Same_Offer |
|123 |3-Jan-2021 |111 |Same_Offer |
|133 |1-Jan-2021 |222 |DIFFERENT_OFFER|
|133 |2-Jan-2021 |333 |DIFFERENT_OFFER|
|144 |1-Jan-2021 |222 |DIFFERENT_OFFER|
|144 |2-Jan-2021 |222 |DIFFERENT_OFFER|
|144 |3-Jan-2021 |333 |DIFFERENT_OFFER|
|144 |4-Jan-2021 |333 |DIFFERENT_OFFER|
我建议 min()
和 max()
:
select t.*,
(case when min(offerid) over (partition by customerid) = max(offerid) over (partition by customerid)
then 'SAME_OFFER' else 'DIFFERENT_OFFER'
end) as status
from t