2012-07-24 175 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