我有一个包含俱乐部会员信息的数据库。每个成员在任何时候都可以是三种不同状态之一(活跃、老手、助理)。我把它分解成三个表。包含所有成员信息的成员表,包含 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 来提取该人成为成员的总时间,但是我无法找到一种方法来计算单个查询中每个状态的时间。
我的理想结果将是:
-----------------------------------------------------------
|member_name | active_years | veteran_years | total_years |
-----------------------------------------------------------
|name | 5 | 5 | 10 |
-----------------------------------------------------------
有没有办法在单个查询中完成我正在寻找的内容?