SELECT MAX(o.ORDER_DATE), MAX(o.REVENUE) , PRODUCT_NAME
FROM orders o
JOIN products p ON o.PRODUCT_ID = p.PRODUCT_ID
GROUP BY CUSTOMER_ID, ORDER_ID, PRODUCT_NAME
SELECT DISTINCT
MAX(o.order_date) OVER (PARTITION BY customer_id) order_date,
FIRST_VALUE(o.revenue) OVER (PARTITION BY customer_id
ORDER BY order_date DESC, revenue DESC) revenue,
FIRST_VALUE(product_name) OVER (PARTITION BY customer_id
ORDER BY order_date DESC, revenue DESC) product_name
FROM orders o
JOIN products p USING (product_id)
SELECT op.*
FROM (SELECT o.*, p.*
ROW_NUMBER() OVER (PARTITION BY o.customer_id ORDER BY o.order_date DESC, p.price DESC) as seqnum
FROM orders o JOIN
products p
ON o.PRODUCT_ID = p.PRODUCT_ID
) op
WHERE seqnum = 1;
2条答案
按热度按时间qlzsbp2j1#
uelo1irk2#
您所述的数据模型没有关于“最昂贵产品”的信息。让我假设
products
实际上有一个列,比如“price”。我想我建议使用窗口功能:
这将为每个客户返回一行。如果有一个领带,你想要所有的行,改变
ROW_NUMBER()
至RANK()
. 请注意,对于要在结果集中包含的列,此方法提供了很大的灵活性。