mysql4.0はサブクエリがつかえないですよね?
そうなるとテンポラリに一度落とした上で、外部結合することになります。
create temporary table temp
select kokyaku,shop,min(date) as date
from chart_table
where 1
and shop=1
group by kokyaku;
select t.kokyaku,t.shop,c.staff,t.date
from temp as t
inner join chart_table as c
on c.date=t.date
and c.kokyaku=t.kokyaku
and c.shop=1
今回の課題・・・
もとのテーブルにIDになりそうなプライマリキーが設定されていないため
絞りこみが非常にしにくいです。
正規化を心がけてください。
ちなみに、簡単にやろうとすると
select kokyaku,shop,staff,min(date) as date
from chart_table
where 1
and shop=1
group by kokyaku;
なんて感じでできそうな気がしますが、これはstaffの項目が
保証されませんので、あやまりです。
それと、結果2はなにがやりたいのかいまいちわかりません。
shopが1の場合のkokyaku毎のカウントをとりたいのであれば
select kokyaku,count(*) as cnt
from chart_table
where 1
and shop=1
group by kokyaku;
ですが、結果は
kokyaku | cnt
1 3
2 1
ですよね?
よく仕様を再検討ください
ご返信ありがとうございます。
ANo1を参考にさせて頂きテンポラリを3回重ねて思う結果を抽出出来ました。
無駄な問い合わせが多いですが、これ以上の方法が解りませんでした。泣!!
1回目のテンポラリ
---------------------------------------
CREATE TEMPORARY TABLE summary_table
SELECT * FROM chart_table
WHERE date <= 2007-02-28
ORDER BY date
2回目のテンポラリ
---------------------------------------
CREATE TEMPORARY TABLE summary_table1
SELECT kokyaku,staff,date,shop,
MIN(date) AS min_date,Count(date) AS cnt_date
FROM summary_table
GROUP BY kokyaku
ORDER BY date
3回目のテンポラリ
---------------------------------------
CREATE TEMPORARY TABLE summary_table1_2
SELECT staff,shop,Count(staff) AS cnt_staff,
Sum(CASE WHEN (cnt_date >= 2) THEN 1 ELSE 0 END) AS sum_repeater
FROM summary_table1
GROUP BY staff
後は、PHP上でリピート率を計算しました。
$staff_value = (($sum_repeater)/($cnt_staff))*100;
補足
早いアドバイスありがとうございました。 また、説明不足ですみませんでした。 これは指定期間中のスタッフごとによる再来店率を表示させる グラフを算出したいと思いまして質問致しました。 ですので、最初に対応したスタッフの顧客が2回目に、 他の店舗に行く事も考えて、事前に店舗を絞り込む事が出来ません。。。 また、過去の時点に於いての、計算ですので期間絞り込み中における、 抽出となります。 ですので、カウント結果2は kokyaku | cnt 1 2 2 2 になります。 とてもややこしくてすみませんでした。