2010-03-03 19 views
2

可以說,我有如下的表:如何使用SQL通過不同的日期來完成一個組?

  • 數量,INTEGER
  • SaleDate,DATETIME

我現在想看到這樣的結果:

Sold in the last 7 days | Sold in last 14 days 
----------------------------------------------------- 
10      | 20 

我可以使用where子句在之間使用,但是如何獲得售出7天和14天的數量?

+2

我通過在輸出的'Qty'柱困惑;你是否想要在過去7天和14天內銷售的實際總數,或者你是否真的希望根據數量進行分組(即銷售數量1,銷售數量2等)? – Aaronaught 2010-03-03 19:06:08

+0

同意Aaronaught:聚合/列沒有任何意義。 – gbn 2010-03-03 19:07:59

+0

@gbn @Aaronaught我修改了我的輸出。 – vikasde 2010-03-03 19:17:26

回答

3

在WHERE子句中過濾得到天0到-14。然後分別在第0天到第7天彙總。

SELECT 
    ..., 
    SUM(CASE WHEN SaleDate >= DATEADD(day, -7, GETDATE()) THEN 1 ELSE 0 END) AS 7days, 
    COUNT(*) AS 14days 
FROM 
    MyTable 
WHERE 
    SaleDate >= DATEADD(day, -14, GETDATE()) 
GROUP BY 
    ... 
0
select sum(Qty), datediff(w, getdate(), SaleDate) as Period 
from table 
group by datediff(ww, getdate(), SaleDate) 
+0

這是爲期一週的限制,而不是7天。 所以週五到週一是一週,但只有3天,例如 – gbn 2010-03-03 19:09:48

+0

過去7天,最後14天,看起來像我的周邊界 – baldy 2010-03-05 12:57:47

+0

好吧,星期一到星期三=一星期的邊界,但是 9天。 OP要求7天和14天。你沒有看到問題是什麼? – gbn 2010-03-08 16:58:55

0

MS的T-SQL測試2003

declare @whatever table(
    qty int, 
    saledate datetime 
) 
insert into @whatever select 1, getdate() 
insert into @whatever select 2, dateadd(dd, -1, getdate()) 
insert into @whatever select 2, dateadd(dd, -2, getdate()) 
insert into @whatever select 1, dateadd(dd, -3, getdate()) 
insert into @whatever select 1, dateadd(dd, -4, getdate()) 
insert into @whatever select 1, dateadd(dd, -5, getdate()) 
insert into @whatever select 1, dateadd(dd, -6, getdate()) 
insert into @whatever select 1, dateadd(dd, -7, getdate()) 
insert into @whatever select 1, dateadd(dd, -8, getdate()) 
insert into @whatever select 1, dateadd(dd, -9, getdate()) 
insert into @whatever select 2, dateadd(dd, -10, getdate()) 
insert into @whatever select 2, dateadd(dd, -11, getdate()) 

insert into @whatever select 1, dateadd(dd, -15, getdate()) 
insert into @whatever select 2, dateadd(dd, -16, getdate()) 

select 
     qty, 
     sum(
      case 
       when datediff(dd, saledate, getdate()) between 0 and 7 then 1 
       else 0 
      end 
     ) as [Sold in last 7 days], 
     sum(
      case 
       when datediff(dd, saledate, getdate()) between 0 and 14 then 1 
       else 0 
      end 
     ) as [Sold in last 14 days] 
    from 
     @whatever 
    group by 
     qty 
; 
相關問題