最後のコメントに基づいて、探しているクエリは非常に単純です。DatePart 関数を使用して、そのオブジェクトの注文日の WEEK を調べます。以下のクエリを確認してください。また、データベースがデフォルトですでに構成されていない限り、Sunday(int 7) は SQL サーバーで設定された最初の日です。したがって、このクエリの目的では、Monday(int 1) を週の最初の曜日として設定する必要があります。実行することで現在の設定を確認できます SELECT @@DATEFIRST
同じオブジェクトが以下の複数の週に 3 回以上配置されている場合、クエリはその週ごとにそのオブジェクトを返します。オブジェクトのみが必要な場合は、結果セットから weekNumber をスキップして、Distinct ObjectID を実行できます。
END で DATEFIRST 設定を元の値にリセットすることを忘れないでください。
DECLARE @Object TABLE
(
objectID INT
)
DECLARE @Order TABLE
(
orderID INT
,objectID INT
,DateSubmitted DATE
)
INSERT INTO @Object( objectID )
SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
INSERT INTO @Order ( orderID, objectID, DateSubmitted )
SELECT 1,1,'10/2/2013'
UNION ALL SELECT 2,1,'10/3/2013'
UNION ALL SELECT 3,1,'10/5/2013'
UNION ALL SELECT 4,1,'10/09/2013'
UNION ALL SELECT 5,1,'10/10/2013'
UNION ALL SELECT 6,1,'10/13/2013'
UNION ALL SELECT 4,2,'10/15/2013'
UNION ALL SELECT 5,2,'10/16/2013'
UNION ALL SELECT 6,2,'10/21/2013'
UNION ALL SELECT 7,3,'09/02/2013'
UNION ALL SELECT 8,3,'09/03/2013'
UNION ALL SELECT 9,3,'09/04/2013'
DECLARE @CurrentDateFirst INT=@@DATEFIRST
SET DATEFIRST 1;
SELECT i.objectID,DATEPART(week,DateSubmitted) AS weekNumber
FROM @Object i
JOIN @Order j
ON i.ObjectID = j.ObjectID
WHERE DateSubmitted >= '9/1/2013'
GROUP BY i.objectID,DATEPART(week,DateSubmitted)
HAVING(COUNT(DISTINCT orderID) >= 3)
ORDER BY i.objectID
SET DATEFIRST @CurrentDateFirst
