私が正しくあなたの既存のクエリを解釈している場合は、私は次のことをお勧め:
select
mnth.num, count(*)
from (
select 1 AS num union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all
select 7 union all select 8 union all select 9 union all select 10 union all select 11 union all select 12
) mnth
left join (
select
e.emp_id
, case
when e.hired_date < date_format(current_date(), '%Y-01-01') then 1
else month(e.hired_date)
end AS start_month
, case
when es.relieving_date < date_format(current_date(), '%Y-01-01') then 0
when es.relieving_date >= date_format(current_date(), '%Y-01-01') then month(es.relieving_date)
else month(current_date())
end AS end_month
from employee e
left join employee_separation es on e.emp_id = es.emp_id
) emp on mnth.num between emp.start_month and emp.end_month
where mnth.num <= month(current_date())
group by
mnth.num
;
これは、2017年11月21日
| num | count(*) |
|-----|----------|
| 1 | 6 |
| 2 | 7 |
| 3 | 8 |
| 4 | 9 |
| 5 | 10 |
| 6 | 9 |
| 7 | 10 |
| 8 | 11 |
| 9 | 12 |
| 10 | 13 |
| 11 | 14 |
DEMO
に次のような結果(CURRENT_DATE()を生産
データボリュームに応じて、emp
サブクエリにwhere句を追加します
, case
when es.relieving_date >= date_format(current_date(), '%Y-01-01') then month(es.relieving_date)
else month(current_date())
end AS end_month
from employee e
left join employee_separation es on e.emp_id = es.emp_id
where es.relieving_date >= date_format(current_date(), '%Y-01-01')
あなたは何を意味するか:: '年 に月ごとのアクティブメンバーを取得する方法'私はあなたが達成しようとしているかを把握することはできません?これはまた、ケースの発現に影響を与え、助けるかもしれません。 – cdaiga
@cdaiga私たちは、1つのテーブルが従業員と雇用の日付の詳細で構成され、他のテーブルは従業員の分離日からなる2つのテーブルを持っています。私の悪い英語のために申し訳ありません – vvr02
サンプルデータを提供してください(それぞれの表について)[最小完全な実例(MCVE)の提供](https://stackoverflow.com/help/mcve) と[なぜ私はMCVE](https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql -query) –