如何解决Access 查询中的返回值
我需要有关 Access 查询的帮助。我需要返回一个客户名称,该客户名称在截至今天的日期的过去 14 天内有三个或更多订单仍然有效。它还应该在结果中显示订单日期。这将填充在报告中并按“客户名称”分组并显示每个“订单日期”。我尝试使用查询向导并输入下面的 sql 但它没有填充任何结果。有人可以帮忙吗?
Select customerid,count(*),cusname,orderdate,orderstatus
From tablename
Where orderstatus="active"
Group by customerid,orderstatus
Having Count(*) >=3;
表格:
CusName:|orderdate:
Mary 4/4/2021
Mary 4/3/2021
Mary 4/8/2021
Mary 3/23/2021
Bob 4/9/2021
Bob 4/1/2021
我期望的结果是:
表格:
Customerid:|CusName:|orderdate:
1 Mary 4/4/2021
1 Mary 4/3/2021
1 Mary 4/8/2021
解决方法
这在 MS Access 中相当棘手,但您可以使用:
select t.*
from tablename as t
where t.orderstatus = "active" and
t.orderdate in (select top 3 t2.orderdate
from tablename t2
where t2.customerid = t.customerid and
t2.orderstatus = "active" and
t2.orderdate > dateadd("day",-14,date())
order by t2.orderdate desc
) and
3 <= (select count(*)
from tablename as t3
where t3.customerid = t.customerid and
t3.orderstatus = "active" and
t3.orderdate > dateadd("day",date())
);
第一个子查询为每个客户获取最近的三行。第二个检查至少有三个。
,- 你也应该对日期进行过滤
- 如果您要计算“每个客户的唯一订单”而不是“每个客户每个日期的唯一订单”,您可能不应该按订单日期分组
SELECT customer_id,cusname,COUNT(*)
FROM <tablename>
WHERE ABS(DateDiff('d',order_date,NOW())) <= 14 -- check order date
AND order_status = 'active' -- check order status
GROUP BY customer_id,cusname -- group by customer,not by order
HAVING COUNT(*) >= 3 -- filter customers with 3+ orders
,
试试这个
SELECT t.customerid,t.cusname,t.orderdate,t.orderstatus
FROM tablename AS t
WHERE t.orderstatus = "active"
AND t.orderdate > Dateadd("d",DATE())
AND (SELECT Count(t1.cusname)
FROM tablename AS t1
WHERE t.customerid = t1.customerid
AND t1.orderstatus = "active"
AND t1.orderdate > Dateadd("d",DATE())) >= 3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。