根據您的最新評論,您查找的查詢非常簡單。使用DatePart函數並找出該對象的訂單日期的WEEK。檢查下面的查詢。除非您的數據庫已默認配置,否則Sunday(int 7)是SQL Server中設置的第一天。所以你爲了這個查詢目的需要設置Monday(int 1)作爲Week的第一天。 你可以通過執行SELECT @@DATEFIRST
檢查當前的設置,如果相同的對象有地方3次以上低於查詢多個星期在返回的每個星期的那個對象。如果只需要對象,則可以從結果集中跳過weekNumber並執行Distinct ObjectID。
不要忘記在結束時將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 [email protected]@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
請更好 「在一個星期的時間內三個或更多的訂單」 定義。你的意思是任何7天的時間?週日到週六?星期一到星期五?本星期?如果你的開始日期在一週之內呢? –
@Joel,如果我沒有讓自己變得複雜,那麼這意味着它是一個滑動窗口計算。類似於查看給定值n檢查n,n + 1和n + 2是否是周範圍。例如,如果訂單日期是10/01,10/03,10/08,10/09,那麼通過查看10/01下一個2日期不會在周範圍內,因此10/01將不符合要求的ObjectID-1。現在看10/03下兩個值是週日期範圍,這就是爲什麼object-1應該在結果集中。 –
因此,任何七天計爲一週?那麼10/10,10/10和10/7的訂單可能會在一週內達到三個,另外10/3,10/4和10/9的另一個對象ID訂單也會計數? –