Sumif与来自不同表的日期条件

时间:2018-05-30 02:19:46

标签: mysql sql

我想知道SQL中是否有一个功能允许您根据日期条件计算总和。我面临的问题是日期必须从另一个表中获取。

这是我的代码(这个工作正常):

SELECT p.first_name, p.last_name, p.customer_id, SUM(p.amount)
FROM payment p, customer c
WHERE c.customer_id = p.customer_id
GROUP BY 1
ORDER BY 4 DESC

表详情如下:

Payment Table 

Payment ID  Customer_ID First_Name Last_Name  Amount Payment Date
1            1           ABC        1          $10    2018-01-01
2            1           ABC        1          $20    2018-02-01
3            1           ABC        1          $30    2018-03-01
4            2           ABC        2          $40    2018-04-01
5            2           ABC        2          $50    2018-05-01
6            3           ABC        3          $60    2018-06-01
7            3           ABC        3          $70    2018-07-01

Customer Table

Customer_ID    Call Date
1              2018-02-01
2              2018-05-01
3              2018-07-01

我的挑战是,我希望查询的工作方式是从客户表中获取日期(通话日期),并将通话日期之前付款的值相加。

2 个答案:

答案 0 :(得分:0)

您可以尝试此查询:

SELECT
    first_name, 
    last_name,
    call_date,
    customer_id, 
    SUM(
        CASE WHEN payment_date < call_date
        THEN amount
        ELSE 0
        END
    )
FROM
(
    Select 
        c.first_name, 
        c.last_name,
        c.call_date,
        p.customer_id, 
        p.amount
        p.payment_date
    From
        payment p JOIN customer c
            ON c.customer_id = p.customer_id
) a

GROUP BY 1,2,3,4

希望它有所帮助,祝你好运!

答案 1 :(得分:0)

首先,请勿在{{1​​}}和GROUP BY中使用列号。使用列名或别名。

其次,使用显式连接。

第三,列出ORDER BY GROUP BY中显示的所有列,并且没有聚合函数。虽然MySQL并不要求这样做,但SQL标准和大多数其他数据库都需要它。这是必要的。 MySQL终于解决了这个问题并starting with MySQL 5.7.5, the ONLY_FULL_GROUP_BY SQL mode is enabled by default

现在,您可以使用将日期条件添加到加入条件中:

SELECT