首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择最新记录,但也忽略包含已完成记录的记录

选择最新记录,但也忽略包含已完成记录的记录
EN

Stack Overflow用户
提问于 2022-10-18 07:53:39
回答 1查看 25关注 0票数 0

我必须加入三张桌子:

date :产品顺序、状态、日期

产品:productorder,productID

info :productID

我想分组所有的产品订单从日期开始,但也忽略状态‘完成’的产品订单。

以下是我所拥有的:

代码语言:javascript
复制
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; 

这个返回的结果太多,所以我知道它是不正确的。如何在获得最大值的同时忽略已完成的产品顺序?

EN

回答 1

Stack Overflow用户

发布于 2022-10-18 09:26:59

假设一个产品订单在其生存期内可以具有多个状态,并且当产品订单达到“已完成”状态时,您希望忽略整个产品订单,那么您就不希望使用<> 'completed'筛选行,因为历史记录中的那些已完成订单中的前几行仍然会留给您。相反,可以在HAVING子句中使用条件聚合来检查订单是否有任何已完成的状态:

代码语言:javascript
复制
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是一个保留字,不能用作(未引号的)标识符(使用引号标识符是错误的做法,而在引号中使用保留字是错误的做法)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74107537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档