2012-06-22 3 views
0

У меня есть этот SQL-код здесь ..SQL работы с датами в котором пункт

SELECT cl.clientid, 
     cl.clientname, 
     cl.billingdate, 
     cp.startdate, 
     cp.expiration, 
     (SELECT COUNT(*) 
      FROM invoice 
      HERE client = cl.clientid) AS invoicecount 
FROM client cl 
INNER JOIN clientplan cp ON cp.client = cl.clientid 
WHERE cl.isbilled = 1 AND expiration is NULL AND expiration > '2012-06-22' 

Моя проблема заключается в том, что клиент может иметь 3 планов клиента и они либо имеют дату истечения срока действия или истечения является NULL. Я пытаюсь получить строки, которые не истекли или являются NULL.

Что я делаю неправильно?

+3

Если дата NULL, у вас никогда не будет значения .. [edit], так что это будет либо EXPIRATION NULL OR (EXPIRATION IS NOT NULL AND EXPIRATION> '22 -JUN-2012 ') [/ edit] – PaddyC

+1

Спасибо, Падди С, это сработало! – user979331

+0

'AND' не означает« эти записи и эти записи »означает« где это верно, и это правда ». В вашем случае вы * не можете * иметь 'expiration IS NULL' *** и ***' expiration> '2012-06-22' 'оба одновременно являются истинными. Вы имеете в виду 'cl.isbilled = 1 AND (expiration is NULL ИЛИ expiration> '2012-06-22')' – MatBailie

ответ

4

Я не уверен, но это не то, что вы хотите это:

SELECT cl.clientid, cl.clientname, cl.billingdate, cp.startdate, cp.expiration, 
(select count(*) from invoice where client = cl.clientid) as invoicecount 
FROM client cl 
inner join clientplan cp on cp.client = cl.clientid 
where cl.isbilled = 1 and (expiration is NULL or expiration > '2012-06-22') 

с или вместо и на выдохов. Потому что срок действия не может быть нулевым и> '2012-06-22' ...

+0

спасибо, что он работает! – user979331

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