我必须加入三张桌子:
date :产品顺序、状态、日期
产品:productorder,productID
info :productID
我想分组所有的产品订单从日期开始,但也忽略状态‘完成’的产品订单。
以下是我所拥有的:
SELECT date.productorder, date.status, info.info <br>
FROM (SELECT productorder, MAX(date) from date where status <> 'completed') newest <br>
INNER JOIN product <br>
ON product.productorder = newest.productorder <br>
INNER JOIN info <br>
ON info.productID = product.ProductID; 这个返回的结果太多,所以我知道它是不正确的。如何在获得最大值的同时忽略已完成的产品顺序?
发布于 2022-10-18 09:26:59
假设一个产品订单在其生存期内可以具有多个状态,并且当产品订单达到“已完成”状态时,您希望忽略整个产品订单,那么您就不希望使用<> 'completed'筛选行,因为历史记录中的那些已完成订单中的前几行仍然会留给您。相反,可以在HAVING子句中使用条件聚合来检查订单是否有任何已完成的状态:
SELECT n.productorder,
n.date_column,
n.status,
i.info
FROM (
SELECT productorder,
MAX(date_column) AS date_column,
MAX(status) KEEP (DENSE_RANK LAST ORDER BY date_column) AS status
FROM date_table
HAVING COUNT(CASE status WHEN 'completed' THEN 1 END) = 0
) n
INNER JOIN product p
ON p.productorder = n.productorder
INNER JOIN info i
ON i.productID = p.ProductID;注意:DATE是一个保留字,不能用作(未引号的)标识符(使用引号标识符是错误的做法,而在引号中使用保留字是错误的做法)。
https://stackoverflow.com/questions/74107537
复制相似问题