2015-04-17 46 views
0

我很難弄清楚如何在這裏集成我的邏輯。計數一個案例或者如果爲空

有兩種情況:

  1. cn.create_time是空
  2. cn.create_time不爲空,在這種情況下,它包含時間戳

我選擇查詢長相的開始像這樣:

select 
    c.eid, 
    count(c.eid), 
    count(case when c.last_mod < cn.create_time then c.eid end) 

但我需要的是使案件的行stat EMENT是(在EnSQLish)

"if cn.create_time is null then count(c.last_mod), else count(case when c.last_mod < cn.create_time then c.eid end)." 

換句話說,如果CREATE_TIME是空計數,其中last_mod小於CREATE_TIME所有記錄別的只算那些記錄。

我該怎麼做?

+0

你能張貼在這裏所涉及的兩個表的結構('C,cn')?這將有助於理解連接,以及如何將這些'COUNT()'轉換爲'SUM()'。 –

回答

2

你在找這樣的事嗎?如果需要,您可以加入兩個

select eid, count(eid) FROM Table WHERE create_time IS NULL 
select eid, count(eid) FROM Table WHERE NOT create_time IS NULL AND last_mod < create_time 

然後:

SELECT c.eid, 
     COUNT(c.edi), 
     SUM 
     (
      CASE 
       WHEN cn.create_time IS NULL OR c.last_mod < cn.create_time THEN 1 
       ELSE 0 
      END 
     ) 
+0

是的!這就是我想要的 - 非常感謝你 –

+0

很高興幫助!感覺自由標記我的答案,以便其他人知道你有你的問題回答。 – Stephan

+1

完成,我試着最初,但SO有一個計時器,阻止我 –

0

你可以做兩個querys,而不是一個。

1

我會使用的指標,而不是SUM()

選擇 c.eid, SUM(IF(c.last_mod < COALESCE(cn.create_time,c.last_mod),0,1)),

如果cn.create_time爲空​​3210將返回c.last_mod

相關問題