SQL - 查找去年未订购的客户以及他们订购的商品

标签 sql snowflake-cloud-data-platform

我可以通过这样做找到去年未订购的客户:

SELECT O.CustID, MAX(O.ORDERDATE) AS LastOrder FROM Orders O
WHERE LastOrder <= DATEADD(year,-1,GETDATE())
GROUP BY O.CustID

我想加入第二个表 (OrderDetails),其中包含名为 OrderID 的字段的订单详细信息。

每个订单只有一件商品。(我的数据实际上不是客户和订单 - 但这个类比适用于我正在做的事情)。

当我将此 OrderID 字段添加到查询中时,我的结果会成倍增加。发生这种情况是因为当我分组时,我按 OrderID 和 CustID 进行分组,这将拉取每个特定的 OrderID。

我的问题是如何从 OrderDetails 表中提取最后一个 OrderID,其中该客户的 orderID 已经超过 1 年了。

这就是我目前所拥有的

SELECT OD.OrderID, O.CustID, MAX(O.ORDERDATE) AS LastOrder 
FROM Orders O
INNER JOIN OrderDetails OD
ON O.OrderID = OD.OrderID
WHERE LastOrder <= DATEADD(year,-1,GETDATE())
GROUP BY OD.OrderID, O.CustID
 

最佳答案

使用:

WITH cte AS (
  SELECT O.*
  FROM Orders O
  INNER JOIN OrderDetails OD
    ON O.OrderID = OD.OrderID
  QUALIFY MAX(O.OrderDate) OVER(PARTITION BY O.CustId) <= DATEADD(year,-1,CURRENT_DATE())
)
SELECT *
FROM cte
QUALIFY ROW_NUMBER() OVER(PARTITION BY CustId ORDER BY OrderDate DESC) = 1

关于SQL - 查找去年未订购的客户以及他们订购的商品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70960089/

相关文章:

amazon-web-services - 在私有(private)链接的情况下如何使用浏览器客户端连接到雪花

sql - 如何在 PostgreSQL 中多次执行查询

mysql - 跟踪 MySQL 更改历史记录的简单方法?

sql - 如何在 SQL 中从整个数据库中查找特定值

sql - 将小数分钟转换为 分钟 :Seconds?

jinja2 - dbt jinja 中是否有所有*有效*数据库和模式组合的变量列表?

php - MySQL中如何将数据从一张表复制到另一张表?

sql - 连接表上的最大日期问题

javascript - 在雪花存储过程中,有没有办法检查结果集中有多少列?

sql - x = null 与 x IS NULL 之间的区别