2013-11-25 2 views
0

Я пытаюсь сделать какую-то функцию экспорта для кого-то, чтобы экспортировать его клиентов в CSV. Его вид работы, за исключением того, что я не получил желаемые результаты. Должник может иметь несколько подписчиков (abonnement). Если у него есть хотя бы одна подписка с датой окончания в будущем, она будет активным клиентом, если у нее нет ее неактивного клиента.Как получить активных клиентов? SQL Query

теперь у меня есть следующий запрос:

SELECT debiteur.bedrijf_naam, adres.straat, adres.huisnr, 
     adres.huisnr_toev, adres.postcode, adres.plaats FROM debiteur 
LEFT JOIN adres ON adres.debiteur_id = debiteur.id 
LEFT JOIN abonnement ON abonnement.debiteur_id = debiteur.id 
LEFT JOIN abonnement_site_rubriek ON abonnement_site_rubriek.abonnement_id = abonnement.id 
WHERE adres.adres_rol = 'post' AND 
     abonnement_site_rubriek.rubriek_id IN (872,899) AND 
     abonnement.datum_dienst_tot < DATE(NOW()) 
GROUP BY debiteur.id 

С помощью этого запроса, если клиент имеет подписок со EndDate в прошлом, даже если он имеет подписку с будущим EndDate, он будет отображаться в неактивных клиентах.

colum datum_dienst_tot - дата окончания подписки.

Как я могу сделать запрос возвращать только неактивные клиенты, просматривая все подписки клиентов?

Кто мог бы указать мне в правильном направлении?

Спасибо большое!

+0

как вы определяете будущую дату окончания? – DevelopmentIsMyPassion

+0

Вы можете использовать DATE_SUB и DATE_ADD, чтобы переместить дату NOW() вперед и назад во времени, так что abonnement.datum_dienst_tot> DATE_SUB (NOW(), INTERVAL 7 DAY) означает активность за последние 7 дней, поэтому <= означает неактивную в за последние 7 дней – nrathaus

+0

В будущем конце даты это дата больше, чем сегодня –

ответ

0

Данный запрос принесет тем, кто их подписки уже закончились, вы бы лучше проверить, если abonnement.datum_dienst_tot больше, чем сегодня, как это следующим образом:

SELECT debiteur.bedrijf_naam, adres.straat, adres.huisnr, 
    adres.huisnr_toev, adres.postcode, adres.plaats FROM debiteur 
LEFT JOIN adres ON adres.debiteur_id = debiteur.id 
LEFT JOIN abonnement ON abonnement.debiteur_id = debiteur.id 
LEFT JOIN abonnement_site_rubriek ON abonnement_site_rubriek.abonnement_id = abonnement.id 
WHERE adres.adres_rol = 'post' AND 
    abonnement_site_rubriek.rubriek_id IN (872,899) AND 
    abonnement.datum_dienst_tot > DATE(NOW()) 
GROUP BY debiteur.id 
+0

Спасибо за ваш ответ. Это 2 года назад, но скорее поздно, чем никогда;) –

Смежные вопросы