2017-03-29 19 views
0

有効なVIP番号を計算します。 1か月あたり。 結果セットがそのようにする必要がありvip_card_no,create_date,expire_date[SQL]有効なVIP番号を計算する方法毎月?

とVIPテーブルあり:

period | valid vip number 
june2016   20 
july2016   18 
august2016  30 
..... 
march2017  40 
april2017  30 

は(期間user.For例により選択された範囲であり、ユーザはこの時間をapril2017するjune2016選択)

期限切れのVIPカードを除外する必要があります。 たとえば、20170321で作成されたVIPカードで、2010年4月4日に有効期限が切れます。 それはmarch2017でカウントが、問題は

1.Iあるapril2017

にはカウントされないことになる時間帯が変数
2.Iあるので、どの期間でグループに知りませんが累積クエリを書き込もうとしましたが、期限切れのデータを排除する方法はわかりません。その

select t1.date, COUNT(t2.vip_card_no) as AccumulateNoOfCases 
FROM vip t1 
join vip t2 on t2.date <=t1.date 
group by t1.date; 

よう

何かが、私はそれに全体を費やしていると私は誰も私を助けることができる願っています! A Ton of Thanks!

+0

PlzはRDBMSにタグを付けます。あなたの望みの結果を得たいと思うあなたのデータ(サンプルデータ)を追加してください。 –

答えて

1

@テリスあなたはサンプルデータを提供していないため、適切な情報なしに問題を解決することは困難です。

私はそれを解決しようとしましたが、あなたの説明に応じてTableを作成しました。いくつかのサンプルデータを挿入しました。私はあなたの説明を考えました:

期限切れのVIPカードを除外する必要があります。たとえば、20170321で作成されたVIPカードで、2010年4月4日に有効期限が切れます。それは2017年3月にカウントされますが、4月4日にはカウントされません。

私はVIPカードをcreate_dateに基づいて数えています。これをチェックしてください:

サンプルデータ

Insert Into VIPTable Values('0000','02/15/2017','02/15/2018') 
Insert Into VIPTable Values('1111','03/15/2017','03/15/2018') 
Insert Into VIPTable Values('2222','03/16/2017','03/16/2018') 
Insert Into VIPTable Values('3333','04/15/2017','04/15/2018') 
Insert Into VIPTable Values('4444','04/15/2017','04/15/2018') 
Insert Into VIPTable Values('5555','04/15/2017','04/15/2018') 
Insert Into VIPTable Values('6666','05/15/2017','05/15/2018') 
Insert Into VIPTable Values('7777','05/15/2017','05/15/2018') 
Insert Into VIPTable Values('8888','06/15/2017','06/15/2018') 
Insert Into VIPTable Values('9999','06/15/2017','06/15/2018') 

SQL

Declare @periodStart DateTime, @periodEnd DateTime 
Set @periodStart = '01/01/2017' 
Set @periodEnd = '12/30/2017' 

Select 
    Convert(Char(4), create_date, 100) + Convert(Char(4), create_date, 120) As Period, 
    Count(vip_card_no) As AccumulateNoOfCases 
From VIPTable 
Where create_date Between @periodStart And @periodEnd 
Group By Convert(Char(4), create_date, 100) + Convert(Char(4), create_date, 120) 
Order By AccumulateNoOfCases Desc 

出力

enter image description here

+1

ありがとう、あなたはcsharpbdが、私が欲しいのは、累積数を取得することです。最後に、私はコーディングでこれを行うことにしました。 Btw、ありがとう! – Teris

+0

@Teris、あなたは歓迎です..... – csharpbd

関連する問題