2015-10-27 59 views
-1

客戶我有3列SQL服務器 - 訂單用1分鐘的差異

ClientId | OrderId | CreatedDate 
1 | 1 | 2015-10-27 10:00:00 
1 | 2 | 2015-10-27 10:00:30 
2 | 3 | 2015-10-27 10:30:30 
3 | 4 | 2015-10-27 10:35:00 
3 | 5 | 2015-10-27 10:35:45 
3 | 6 | 2015-10-27 12:30:00 

我想從插入同一客戶端計算的訂單數量表(或多或少)在同一分鐘。

這樣我預期的結果將是

ClientId | Count(OrderId) 
1 | 2 
2 | 1 
3 | 2 
3 | 1 

我一直使用內部聯接與自身,但沒有能夠做到這一點嘗試。有什麼建議麼?

+0

所以你想要客戶端的兩個訂單之間的差異?您只需使用別名將表加入自己。 – JonH

+0

也許我沒有解釋正確的...我想在同一分鐘內統計插入同一個客戶端(或多或少)的訂單數量。應該像'po2.Created BETWEEN DATEADD(MINUTE, - 1,po1.Created)AND DATEADD(MINUTE,1,po1.Created)' –

+0

您需要添加到您的問題,您的問題目前沒有任何意義,因此發佈了錯誤的答案。 – JonH

回答

0

試試這個:

CREATE TABLE #MyOrders 
(
    ClientId Int, 
    OrderId Int, 
    CreatedDate DateTime 
) 


INSERT INTO #MyOrders 
VALUES 
    (1,1,'2015-10-27 10:00:00'), 
    (1,2,'2015-10-27 10:00:30'), 
    (2,3,'2015-10-27 10:30:30'), 
    (3,4,'2015-10-27 10:35:00'), 
    (3,5,'2015-10-27 10:35:45'), 
    (3,6,'2015-10-27 12:30:00') 

SELECT ClientId, Count(*) as [Count(OrderId)] 
FROM #MyOrders 
GROUP BY ClientId, DATEADD(Minute, DATEDIFF(Minute, 0, CreatedDate), 0) 

這給

ClientId Count(OrderId) 
-------- -------------- 
1   2 
2   1 
3   2 
3   1 
+0

就是這樣!謝謝你們! –

0

試試這個

select ClientId,count(1) 
from yourtable 
group by ClientId,CAST(CONVERT(VARCHAR(17),CreatedDate,113) AS datetime) 

Sql Fiddle

+0

這不處理你會得到的分鐘間隔。在上面的示例中,clientid = 3應該只有1個計數。 – JonH

+0

@JonH - 在downvoting之前讓自己清楚。 http://sqlfiddle.com/#!3/f0486/2 –

+0

我沒有downvote。 – JonH

0

這應該工作:

select clientid, count(*) 
from table 
group by cast(createddate as date), datepart(hour, createddate), datepart(minute, createddate) 
+0

您不需要按最後一部分進行分組,只要條件能夠擺脫不需要的記錄即可。 – JonH

+0

@JonH,不能明白你的意思 –

+0

只要你不在他要求的門檻內放棄訂單,最後的分組是不必要的。檢查他的問題。 – JonH