私は以下のことを達成しようとしています - 顧客ごとのセッションをカレンダー週ごとにグループ化したいと思っています。ここで私は、これを達成するために、これまで持っているクエリは次のとおりです。MYSQL - 値のない週を表示しながら週ごとにグループ化する
SELECT o.name
, s.organization_id
, count(s.id) as num_of_sessions
, CONCAT(s.created_at, ' - ', s.created_at + INTERVAL 6 DAY) AS week
FROM triton.sessions s
, triton.organizations o
where o.id=s.organization_id
and s.organization_id in (17,19,20,21,24,25,26,27,29,31,32,33,34,25,36,37,38,39,40,41,43,44,45,46,47,48,49,50,51,52,53,56,57,58,59,60,62,69,70,72)
GROUP BY s.organization_id, WEEK(s.created_at)
ORDER BY o.name, WEEK(s.created_at);
これで問題は、顧客がWebサイトのセッションを持っていなかったところで週は0と報告されていないということです - 代わりにその週は報告されていません。これは、データをExcelに簡単に取り込むことができず、顧客のセッションごとにグラフを作成できないため、問題です。この問題を解決しようとする
、私は毎週番号の1から52の値で一時週間テーブルを作成し、アプローチは、このリンクで提案しようとしました:私は左の外側を行う際Summarise by week, even for empty rows
課題であります私は団体のためにグループを失う。ここで
は(組織によってグループにしようとする前に)週間だけのグループに使用され、作業SQLです:
select w.weeknum
, sess.club
, sess.organization_id
, count(sess.club) from weeks w
left outer
join (select o.name as club
, s.organization_id
, s.created_at
from sessions s
, organizations o
where s.organization_id in (17,19,20,21,24,25,26,27,29,31,32,33,34,25,36,37,38,39,40,41,43,44,45,46,47,48,49,50,51,52,53,56,57,58,59,60,62,69,70,72)
and o.id=s.organization_id
) sess
on (w.weeknum = extract(week from sess.created_at))
group by w.weeknum
上記のコードだけカウントが私に与えて、52行(各週1)を返します。各週のセッション数
上記のコードを組織単位で拡張したいと考えています。私は52 * Nの行を返すべきです。ここで、Nは組織の数です。私はこれがgroupbyのステートメントに組織を追加するのと同じくらい簡単だと思っていましたが、それからsesssionsを持つ週が戻ってきました(最初から問題がありました)。クエリは次のとおりです。
select w.weeknum
, sess.club
, sess.organization_id
, count(sess.club)
from weeks w
left outer
join (select o.name as club
, s.organization_id
, s.created_at
from sessions s
, organizations o
where s.organization_id in (17,19,20,21,24,25,26,27,29,31,32,33,34,25,36,37,38,39,40,41,43,44,45,46,47,48,49,50,51,52,53,56,57,58,59,60,62,69,70,72)
and o.id=s.organization_id
) sess
on (w.weeknum = extract(week from sess.created_at))
group by sess.club, w.weeknum
order by sess.club
私の目標を達成するための他の提案はありますか?基本的に私の顧客の皆様には、週ごとのセッションリストを見たいと思っています(特定の週にセッションがなかったとしても)。
私はあなたが短く場合は、より良い回答を得るだろうと思いますあなたのテコードをフォーマットしてフォーマットする –