我有两个表,一个是事件,第二个是注册。 我已将活动或过去的活动详细信息存储在“我的事件”表中。
第一个事件表:
*-----------------------------------------------------*
| Event_id | Event_name | Event_end_date | Status |
*-----------------------------------------------------*
| E001 | AHM | 2019-02-05 10:00 | Past |
| E002 | JPS | 2019-03-14 10:00 | Active |
| E003 | AHM | 2019-02-05 10:00 | Active |
*-----------------------------------------------------*
第二张注册信息表:
*------------------------------------*
| R_no | Event_id | booking_date |
*------------------------------------*
| 101 | E001 | 2019-02-01 17:00 |
| 102 | E001 | 2018-11-19 18:50 |
| 101 | E002 | 2018-12-09 14:00 |
| 102 | E002 | 2019-01-25 08:50 |
| 103 | E002 | 2019-02-05 18:00 |
| 101 | E003 | 2019-02-08 10:00 |
| 102 | E003 | 2019-02-10 13:00 |
| 103 | E003 | 2019-02-12 14:50 |
| 104 | E003 | 2019-02-14 16:00 |
*------------------------------------*
现在我想要事件E003的输出如下,请注意,在2018年12月和2019年1月没有预订E003,但根据登记表,有一个活动事件E002和2018年的一些票簿-Dec和2019-Jan,这取决于event_end_date。
*-----------------*
| Month | Count |
*-----------------*
| 2018-12 | 0 |
| 2019-01 | 0 |
| 2019-02 | 4 |
*-----------------*
我能够获得2019-02的计数,但不能获得12月和1月的计数。我正在使用以下查询:
SELECT DATE_FORMAT(booking_date, "%Y-%m") As month, count(event_id) AS count FROM registration LEFT JOIN events ON registration.event_id = events.event_id WHERE registration.event_id = 'E003' GROUP BY registration.event_id
因此,我可以对查询进行任何更新,以便获得输出。
答案 0 :(得分:0)
您可以将correlated subquery
与not exists
一起使用
SELECT DATE_FORMAT(booking_date, "%Y-%m") As month, count(event_id) AS count
FROM registration LEFT JOIN events ON registration.event_id = events.event_id
WHERE registration.event_id = 'E003' and not exists
(select 1 from registration b where registration.event_id=b.event_id and Status='Past')
GROUP BY registration.event_id
答案 1 :(得分:0)
下面是查询-
select
t1.book_year_month, count(*) FROM events t1 LEFT OUTER JOIN
(
SELECT DISTINCT from_unixtime(unix_timestamp(booking_date), '%Y-%m') book_year_month,
booking_date from events) t2 ON t2.booking_date<=t1.event_end_date GROUP BY t2.book_year_month;
答案 2 :(得分:0)
如果我理解正确,则可以使用LEFT JOIN
并进行如下过滤:
SELECT DATE_FORMAT(booking_date, '%Y-%m') As month,
COUNT(event_id) AS count
FROM registration r LEFT JOIN
events e
ON e.event_id = r.event_id AND
e.event_id = 'E003'
GROUP BY DATE_FORMAT(booking_date, '%Y-%m');