正如其他人在 cmets 中所说,您应该真正尝试改进您的问题,以便人们更愿意回答和帮助您。
设置一些测试数据(对您的架构做出假设):
CREATE TABLE Customers (
CustomerID INT,
CustomerName VARCHAR(50)
)
CREATE TABLE Orders (
OrderId INT,
OrderDate DATETIME,
CustomerID INT,
Product VARCHAR(50)
)
INSERT INTO Customers
SELECT 1, 'John Smith'
UNION
SELECT 2, 'Jane Doe'
UNION
SELECT 3, 'Rachel Booth'
UNION
SELECT 4, 'Steve Barnes'
UNION
SELECT 5, 'Nancy Green'
UNION
SELECT 6, 'Phil Jones'
INSERT INTO Orders
SELECT 1, '2016-09-01', 1, 'Bread'
UNION
SELECT 2, '2016-09-10', 3, 'Milk'
UNION
SELECT 3, '2016-09-19', 1, 'Milk'
UNION
SELECT 4, '2016-10-07', 4, 'Bread'
UNION
SELECT 5, '2016-10-13', 2, 'Milk'
UNION
SELECT 6, '2016-10-15', 4, 'Milk'
UNION
SELECT 7, '2016-10-19', 6, 'Milk'
UNION
SELECT 8, '2016-10-21', 6, 'Ice Cream'
UNION
SELECT 9, '2016-10-27', 1, 'Milk'
UNION
SELECT 10, '2016-10-28', 4, 'Milk'
UNION
SELECT 11, '2016-11-06', 5, 'Ice Cream'
UNION
SELECT 12, '2016-11-09', 5, 'Bread'
并设置要检查的月份:
DECLARE @Month DATETIME
SET @Month = '2016-09-01'
我会得到一个符合您逻辑的客户列表,如下所示:
SELECT DISTINCT c.CustomerName
FROM Customers c
JOIN Orders ob ON ob.CustomerID = c.CustomerID
JOIN Orders omi ON omi.CustomerID = c.CustomerID
WHERE ob.Product = 'Bread'
AND omi.Product IN ('Milk','Ice Cream')
AND DATEADD(month, DATEDIFF(month, 0, ob.OrderDate), 0) = DATEADD(month, DATEDIFF(month, 0, omi.OrderDate), 0)
AND DATEADD(month, DATEDIFF(month, 0, ob.OrderDate), 0) = @Month