我想知道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
我的挑战是,我希望查询的工作方式是从客户表中获取日期(通话日期),并将通话日期之前付款的值相加。
答案 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