【发布时间】:2022-11-11 00:12:48
【问题描述】:
我有 2 张表客户和订单。
第一个问题:
这是客户的主表,其中包含客户编号、客户名称、活动标志等几列。表可能包含相同客户编号的 2 条或更多记录,但根据业务逻辑,理想情况下一次只有 1 条记录积极点。我需要找到只有 1 条记录并且应该处于活动状态的客户。
我写的查询:
select customer_number, count(*)
from customers c
where active = false
group by customer_number
having count(*) = 1;
这将返回有 2 条记录且只有 1 条未处于活动状态的客户。
问题2:
除了客户表,我们还有另一个表是订单表,它包含客户编号(与客户表中相同)、交货日期、订单编号、插入时间等列。 我需要找到 ACTIVE 为 false 且自 180 天以来没有下过任何订单的客户。 (插入时间::日期 - 180)。
我所尝试的并没有给我想要的输出,因为在回溯测试中我发现数据是错误的
select om.customer_number,
c.customer_name,
om.deliverydate,
om.insert_time
from customers c, order_master om
where
om.customer_number in
(
select c2.customer_number
from customers c2
where c2.active = false
group by c2.customer_number
having count(*) =1
)
and c.customer_number = om.customer_number
group by om.customer_number, c.customer_name,
om.deliverydate, om.insert_time
having max(om.insert_time::date) < '2022-06-01' ;
我尝试过的查询,我已经在我的问题中提到了它们。请检查一下。
【问题讨论】:
-
where active = false发生在group by之前。您需要使用子查询或with子句。对于第二个,您需要一个子查询或with子句。
标签: java sql postgresql