SQLに問題があります。私は次の表を持っています:SQL Serverのクライアントのローテーション2014
declare @t table (date datetime,
shop VARCHAR(50),
client VARCHAR(50)
);
insert into @t
VALUES ('2016-01-15', 'abc','a1'),
('2016-01-15', 'abc','b1'),
('2016-01-15', 'def','c1'),
('2016-01-15', 'def','a1'),
('2016-01-15', 'ghi','b1'),
('2016-01-15', 'ghi','a1'),
('2016-02-15', 'abc','a1'),
('2016-02-15', 'abc','b1'),
('2016-02-15', 'abc','c1'),
('2016-02-15', 'def','a1'),
('2016-02-15', 'ghi','b1'),
('2016-02-15', 'ghi','a1'),
('2016-03-15', 'abc','a1'),
('2016-03-15', 'abc','c1'),
('2016-03-15', 'def','a1'),
('2016-03-15', 'ghi','b1'),
('2016-03-15', 'ghi','e1')
私は、クライアントローテーションを計算したいと思います。だから毎月、どの店舗でも、私は何人の顧客が騒ぎ立てられたのか、何人の顧客が何ヶ月前に残っているのかを数えなければなりません。私はクライアント数を見ることはできませんが、クライアントの特定の名前が1か月前に現れたかどうかを確認する必要があります。すべての日付は「年 - 月-15」のようになります。
だから私は、次のようにテーブルを取得したいと思います:最初の月0クライアントが解約し
declare @t2 table (date date,
shop VARCHAR(50),
churned INTEGER,
stayed INTEGER,
came INTEGER
);
INSERT INTO @t2
VALUES ('2016-02-15', 'abc', 0, 2, 1),
('2016-02-15', 'def', 1, 1, 0),
('2016-02-15', 'ghi', 0, 2, 0),
('2016-03-15', 'abc', 1, 2, 0),
('2016-03-15', 'def', 0, 1, 0),
('2016-03-15', 'ghi', 1, 1, 1)
だから、ABCショップのための例えば後に、2つのクライアントは、前の月のように滞在し、1つの新しいクライアントが来ました。 Churnedは、クライアントが残っていることを意味します。
ありがとうございました。私は、SQL Serverを使用しています2014
EDIT: もう一つの例:
declare @t table (date datetime,
shop VARCHAR(50),
client VARCHAR(50)
);
insert into @t
VALUES ('2016-01-15', 'abc','a1'),
('2016-01-15', 'abc','b1'),
('2016-02-15', 'abc','b1'),
('2016-02-15', 'abc','c1'),
('2016-03-15', 'abc','z1'),
('2016-03-15', 'abc','y1'),
('2016-03-15', 'abc','a1')
は、私は次の表を取得する必要があります:このデータについては は
declare @t2 table (date date,
shop VARCHAR(50),
churned INTEGER,
stayed INTEGER,
came INTEGER
);
INSERT INTO @t2
VALUES
('2016-01-15', 'abc', 0, 0, 2),
('2016-02-15', 'abc', 1, 1, 1),
('2016-03-15', 'abc', 2, 0, 3)
これは一つだけと簡単な例であります明確化のために店。
を定義してください試すことができます。 – Tanner
クライアントが残したメンです。 –