Teradata SQL 按项目获取最近的单个客户
Teradata SQL Get Most Recent Single Customer By Item
我正在努力按项目获取最近的单个客户。我有一个 table 的销售信息如下
ITEM INVOICE_DT CUST_NM SALES_AMT
ITEM1 1/5/2022 CUST1 100
ITEM1 1/5/2022 CUST2 200
ITEM1 1/1/2022 CUST3 300
ITEM2 1/3/2022 CUST1 50
ITEM2 1/3/2022 CUST2 50
ITEM2 1/1/2022 CUST3 100
我尝试了以下方法:
SELECT A.ITEM, A.INVOICE_DT, A.CUST_NM
FROM SALES_TABLE A
INNER JOIN (SELECT ITEM, MAX(INVOICE_DT) AS MAX_INVOICE_DT FROM SALES_TABLE GROUP BY ITEM) B
ON A.ITEM = B.ITEM AND A.INVOICE_DT = B.MAX_INVOICE_DT
我 运行 遇到的问题是,如果多个客户在同一天购买了同一件商品,则同一件商品的输出会重复。我正在考虑使用销售额作为决胜局,但我不知道如何实施。同样在极少数情况下,两个客户在同一天以相同的总销售额购买相同的商品,我宁愿选择一个 'random' 单一的客户名称,也不愿选择比零件数量更多的记录。
预期输出:
ITEM INVOICE_DT CUST_NM
ITEM1 1/5/2022 CUST2
ITEM2 1/3/2022 CUST1 OR CUST2
您可以使用 Ordered Analytical Function 来处理这种情况。
借助有序分析函数,您可以 RANK
您的客户基于 INVOICE_DT 和 SALES_AMT。
您可以如下重写您的查询以获得结果。
SELECT a.item,
a.invoice_dt,
a.cust_nm ,
ROW_NUMBER() OVER(PARTITION BY a.item ORDER BY a.invoice_dt DESC,a.sales_amt DESC) AS rn
FROM sales_table a
QUALIFY rn=1
注意:如果两个客户在同一天购买了相同数量的相同商品,结果将是随机的,您也可以添加order by cust_nm
以获得相同的结果每次都有结果。
我正在努力按项目获取最近的单个客户。我有一个 table 的销售信息如下
ITEM INVOICE_DT CUST_NM SALES_AMT
ITEM1 1/5/2022 CUST1 100
ITEM1 1/5/2022 CUST2 200
ITEM1 1/1/2022 CUST3 300
ITEM2 1/3/2022 CUST1 50
ITEM2 1/3/2022 CUST2 50
ITEM2 1/1/2022 CUST3 100
我尝试了以下方法:
SELECT A.ITEM, A.INVOICE_DT, A.CUST_NM
FROM SALES_TABLE A
INNER JOIN (SELECT ITEM, MAX(INVOICE_DT) AS MAX_INVOICE_DT FROM SALES_TABLE GROUP BY ITEM) B
ON A.ITEM = B.ITEM AND A.INVOICE_DT = B.MAX_INVOICE_DT
我 运行 遇到的问题是,如果多个客户在同一天购买了同一件商品,则同一件商品的输出会重复。我正在考虑使用销售额作为决胜局,但我不知道如何实施。同样在极少数情况下,两个客户在同一天以相同的总销售额购买相同的商品,我宁愿选择一个 'random' 单一的客户名称,也不愿选择比零件数量更多的记录。
预期输出:
ITEM INVOICE_DT CUST_NM
ITEM1 1/5/2022 CUST2
ITEM2 1/3/2022 CUST1 OR CUST2
您可以使用 Ordered Analytical Function 来处理这种情况。
借助有序分析函数,您可以 RANK
您的客户基于 INVOICE_DT 和 SALES_AMT。
您可以如下重写您的查询以获得结果。
SELECT a.item,
a.invoice_dt,
a.cust_nm ,
ROW_NUMBER() OVER(PARTITION BY a.item ORDER BY a.invoice_dt DESC,a.sales_amt DESC) AS rn
FROM sales_table a
QUALIFY rn=1
注意:如果两个客户在同一天购买了相同数量的相同商品,结果将是随机的,您也可以添加order by cust_nm
以获得相同的结果每次都有结果。