这是我面临的一个有趣的挑战。如果你可以为这个问题创建一个查询,我称你是天才 - 这一直困扰着我很长一段时间。
这是两个表:
客户表
customerId,name
交易表
transactionId,customerId,amountPaid,purchaseDate
我想为当前没有任何交易的人选择所有customerId,但是欠前几个月的欠款。
例如,如果我选择的月份是10月份,我想选择10月份没有交易的所有customerId,但10月份之前的交易总和大于零。基本上,我的目标是生成一份报告,显示当前月份欠款但欠前几个月的客户的收据。谢谢你考虑这个问题。
答案 0 :(得分:0)
您可能需要重新考虑数据库模型。恕我直言,我认为你需要更多的表来处理多个月。说一个月(1月到12月)的表作为列和用户ID列。从那以后我认为你应该能够执行你所描述的算法。
答案 1 :(得分:0)
您可以获取每位客户的最后购买日期,以便购买最多并包含所选月份,并检查是否在所选月份之前。
自从我使用Access以来已经有一段时间了,但是这样的事情:
select c.customerId, c.name, max(t.purchaseDate) as lastPurchaseDate
from Customers as c
inner join Transactions as t on t.customerId = c.CustomerId and t.PurchaseDate < #2012-11-01#
group by c.customerId, c.name
having lastPurchaseDate < #2012-10-01#
答案 2 :(得分:0)
我终于在user1238850和Guffa的帮助下解决了这个问题。它有点乱,但它似乎到目前为止工作。
SELECT Customers.customerId
FROM (
SELECT Customers.customerId
FROM Customers
WHERE (((Customers.customerId) Not In (
SELECT Transactions.customerId
FROM Transactions
WHERE Customers.customerId = Transactions.customerId AND
Transactions.purchaseDate >=#8/1/2012# AND
Transactions.purchaseDate <#9/1/2012# OR
Transactions.customerId Is Null)))
)
AS Q1
INNER JOIN (
SELECT Transactions.customerId, Sum(Transactions.amountPaid) AS SumOfamountPaid
FROM Transactions
WHERE Transactions.purchaseDate <#8/1/2012#
GROUP BY Transactions.customerId
) AS Q2
ON Q1.customerId = Q2.customerId;