2012-07-24 139 views
0

我需要編寫一個SQL查詢以生成以下結果集。達到此目的的最佳方式是什麼?SQL Server組過去24小時,過去7天和過去14天

Time Range   Qty    Amount 
=============================================== 
Last 24 Hours  56     $2000 
Last 7 Days   359    $3900 
Last 14 Days  2321    $22,888 
+0

您使用的是哪個數據庫? – Andomar 2012-07-24 05:53:14

+0

什麼是輸入表? – 2012-07-24 05:53:41

回答

4
select 'Last 24 hours' 
,  sum(Qty) as Qty 
,  sum(Amount) as Amount 
from YourTable 
where TradeDt > dateadd(hour, -24, getdate()) 
union all 
select 'Last 7 days' 
,  sum(Qty) 
,  sum(Amount) 
from YourTable 
where TradeDt > dateadd(day, -7, getdate()) 
union all 
select 'Last 14 days' 
,  sum(Qty) 
,  sum(Amount) 
from YourTable 
where TradeDt > dateadd(day, -14, getdate()) 
+0

謝謝Andomar。這也是我能想到的。只是想知道是否有更聰明的方式來轉發數據? – Chen 2012-07-31 05:35:20

1

我的第一個猜測是使用UNION,如果你絕對需要一個表結果(否則,你可能只是獲取由行的數據行)。

我不認爲有任何更好的方式來做到這一點在SQL中。

SELECT 'Last 24 hours', SUM(qty), SUM(amount) 
FROM table 
WHERE datediff(day, getdate(), date) = 1 

UNION 

SELECT 'Last 7 days', SUM(qty), SUM(amount) 
FROM table 
WHERE datediff(getdate(), date, 'day') < 7 

UNION 

SELECT 'Last 14 days', SUM(qty), SUM(amount) 
FROM table 
WHERE datediff(getdate(), date, 'day') < 14 
+1

對像'14'這樣的常量做'dateadd'通常比在列上做得更好。這允許SQL Server在「Date」上使用索引(如果有)。 +1 – Andomar 2012-07-24 05:59:13

+0

不知道,謝謝 – Andreas 2012-07-26 06:41:20

0

可以在DATEADD使用where子句等

select * from table 
where datefield > DateAdd(d,-1,getdate()) 

SELECT * FROM表 其中的DateField>使用DateAdd(d,-7,GETDATE()) SELECT * FROM表 其中的DateField > DateAdd(d,-14,getdate())

for day等

+0

select * from table where datefield> DateAdd(d,-1,getdate()) – 2012-07-24 08:21:51