Счетчик показывает ноль, если в SQL нет значения с каким-либо условием? - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть две таблицы. Одна - это события, а вторая - регистрация.Я сохранил информацию об активном или прошедшем событии в таблице Мои события.

Первая таблица для событий:

*-----------------------------------------------------*
| 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-декабрь и 2019-январь для E003 не было бронирования, но согласно таблице регистрации есть одно активное событие E002 и несколько билетов на 2018-декабрь и 2019-Январь, и это зависит от event_end_date.

*-----------------*
|  Month  | Count |
*-----------------*
| 2018-12 |   0   |
| 2019-01 |   0   |
| 2019-02 |   4   |
*-----------------*

Я могу получить счет за 2019-02, но не могу за декабрь и январь. Я использую следующий запрос:

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

Так что любое обновление моего запроса, чтобы я мог получить мой вывод.

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Ниже будет запрос -

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;
0 голосов
/ 19 февраля 2019

Если я правильно понимаю, вы можете использовать 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');
0 голосов
/ 19 февраля 2019

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...