【发布时间】:2016-10-11 19:57:53
【问题描述】:
我正在尝试获取以下数据:
- 列出过去 12 个月内订购过两次或两次以上的所有客户
- 列出过去 12 个月内仅订购过一次的所有客户
- 列出不符合上述条件的所有客户
我使用的是 SQL Server 11.0。
我有以下表格:
dbo.[订单]:
CustomerID
OrderID
dbo.Customer:
BusinessName
Postcode
dbo.AccountCallbacks:
UserId
NotInterestedReasonID
我需要计算来自 dbo.[Order] 的所有订单,其中 dbo.AccountCallbacks 中的最后一条记录的 UserID 为“6EAE3206-519E-4DE7-B10B-6F2476D7D20F”,并且上述每个日期范围之间的 NotInterestedReasonID 为空然后是其他一切。
我不确定要提供什么其他信息,这是我目前想出的,但我觉得我正在以一种特殊的方式去做!
SELECT
Customer.CustomerID,
BusinessName,
Postcode,
NumOrders
FROM
Customer
INNER JOIN
(SELECT
CustomerID,
COUNT(OrderID) AS NumOrders
FROM
dbo.[Order]
WHERE
UserId = '6EAE3206-519E-4DE7-B10B-6F2476D7D20F'
AND NOT (PaymentDate IS NULL)
AND OrderDate <= DATEADD(MONTH, -12, GETDATE())
GROUP BY
CustomerID) AS payingCustomers ON Customer.CustomerID = payingCustomers.CustomerID
INNER JOIN
(SELECT
CustomerID,
MAX(CallbackDate) AS LastCallbackDate
FROM
dbo.AccountCallBacks
WHERE
NotInterestedReasonID IS NULL
GROUP BY
CustomerID) AS otherCustomers ON Customer.CustomerID = otherCustomers.CustomerID
ORDER BY
NumOrders DESC
您可能已经猜到了,SQL 不是我的强项!我真的希望我已经提供了所需的信息,如果没有,请告诉我。
示例数据:
AccountCallbacks:
CallbackID UserID CustomerID Created CallbackDate Enabled CallbackTimeID NotInterestedReasonID
16 695624B5-90E0-45C0-AFCF-07C7A275BE6E 504 2011-02-01 10:40:37.183 2015-10-08 1 3 1
17 695624B5-90E0-45C0-AFCF-07C7A275BE6E 505 2011-02-01 10:40:37.220 2011-11-01 0 3 NULL
18 2B37842F-33AF-4777-9FC7-3D4F648F5D8F 506 2011-02-01 10:40:37.263 2012-08-20 0 1 NULL
19 2B37842F-33AF-4777-9FC7-3D4F648F5D8F 508 2011-02-01 10:40:37.300 2012-07-20 0 1 NULL
20 2B37842F-33AF-4777-9FC7-3D4F648F5D8F 509 2011-02-01 10:40:37.340 2014-02-10 0 1 NULL
订单:
OrderID CustomerID UserID OrderDate PaymentTypeID PaymentStatusID PaymentDate TransactionRef PurchaseOrderNumber
44523 4199 695624B5-90E0-45C0-AFCF-07C7A275BE6E 2016-10-11 16:54:01.350 1 2 2016-10-11 16:57:13.000 011194
44522 3748 695624B5-90E0-45C0-AFCF-07C7A275BE6E 2016-10-11 16:13:00.290 1 2 2016-10-11 16:13:57.000 011486
44521 1812 2B37842F-33AF-4777-9FC7-3D4F648F5D8F 2016-10-11 16:08:16.923 1 2 2016-10-11 16:09:33.000 082663
客户:
CustomerID BusinessName Postcode
502 Company 1 BP3 6UK
503 Company Name BP3 6BK
504 Company ABC SS13 1LS
预期输出:(这将是一组不同的数据,具体取决于上述“报告”)
CustomerID BusinessName Postcode
799 Company2 LTD YO17 6YA
5586 Company3 Plc EH3 9DJ
5638 MR A ENG LTD EP4 1PL
6707 DUSTO Ltd NE22 7LB
【问题讨论】:
-
请添加示例数据和预期输出
-
添加了来自每个表的示例数据和预期的输出。谢谢
-
@MichaelEaton 如果这些都不起作用,我会更新我的答案,如果你能为我解释第三个问题。
标签: sql-server tsql