クラブの会員情報を含むデータベースがあります。各メンバーは、いつでも3つの異なるステータス(アクティブ、ベテラン、アソシエート)のいずれかになります。私はそれを3つのテーブルに分けています。すべてのメンバー情報を含むメンバーテーブル、status_nameとstatus_idを含むステータステーブル、およびmember_id、status_id、date_from、date_toを含むグリッドテーブル。
メンバーが各ステータスで費やした時間を計算しようとしています。私は現在、次のクエリを使用して、メンバーが「アクティブ」ステータスで費やした合計時間を計算しています。
SELECT first_name, last_name,
(DATE_FORMAT( FROM_DAYS( SUM( DATEDIFF( IFNULL( q.date_to, NOW() ) , q.date_from ) ) ) , "%Y" ) +0) as service_years
FROM member a
LEFT JOIN member_status q on a.id = q.member_id AND q.status_id = 1
GROUP BY a.id
左側の結合のANDを省略することで、その人がメンバーであった合計時間を取得できることはわかっていますが、1回のクエリで各ステータスの時間を計算する方法がわかりません。
私の理想的な結果は、次のようなものです。
-----------------------------------------------------------
|member_name | active_years | veteran_years | total_years |
-----------------------------------------------------------
|name | 5 | 5 | 10 |
-----------------------------------------------------------
単一のクエリで私が探していることを達成する方法はありますか?