在查询/报告中访问2013复杂的SUM

时间:2015-06-02 14:41:34

标签: sql ms-access-2013

我正在尝试在Access 2013中创建一个显示当前状态和日期的查询,同时忽略旧的状态记录。

我有三张桌子:

customer 
-id (pk) 
-last 
-first

status 
-id (pk) 
status 
description

status-customer 
id (pk) 
customer_id 
status_id 
status_date 
notes

我想创建一个客户列表,其中包含他们处于特定状态的天数。

考虑以下连接表:

Last        First        Customer_id         Status_date       Status
John         Smith              1               05/1/2015        A
John         Smith              1               05/10/2015       B
John         Smith              1               05/14/2015       A
John         Smith              1               05/30/2015       B 
Mary         Johnson            2               05/26/2015       A

我想要一些看起来像这样的东西:

                                                                Days in
 Last        First        Customer_id         Status_date       Status A
 John         Smith              1               05/1/2015        25     
 Mary         Johnson            2               05/26/2015       5

请注意,计算的天数仅为A& A之间的天数。 B.因此,对于John Smith,记录1和2之间的间隔被添加到记录3和4之间的间隔。如果状态未从A更改为B,则使用当前日期计算总数。

谢谢。

1 个答案:

答案 0 :(得分:0)

相关的子选择,派生表,分组等。我不知道MS Access如何减去日期,因此可能需要调整SUM(statusB - statusA)

select Last,
       First,
       Customer_id,
       MIN(statusdateA),
       SUM(statusdateB - statusdateA)
(
select Last,
       First,
       Customer_id,
       Status_date as statusdateA,
       (select min(t2.Status_date) from tablename t2
        where t2.Status_date > t1.Status_date
          and t2.status = 'B') as statusdateB
from tablename t1
where status = 'A'
) dt
group by Last, First, Customer_id