我需要编写一个SQL查询来生成以下结果集。实现这一目标的最佳方法是什么?
Time Range Qty Amount
===============================================
Last 24 Hours 56 $2000
Last 7 Days 359 $3900
Last 14 Days 2321 $22,888
答案 0 :(得分: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())
答案 1 :(得分: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
答案 2 :(得分:0)
你可以在dateAdd上使用where子句,如
select * from table
where datefield > DateAdd(d,-1,getdate())
从表中选择* 其中datefield&gt;使用DateAdd(d,-7,GETDATE()) 从表中选择* 其中datefield&gt;使用DateAdd(d,-14,GETDATE())
一天等等