2013-11-20 206 views
0

如何使此計數返回爲零?任何時候我想返回的任何字段都等於零,整個查詢返回null?我一直在遇到這個問題,我迫切需要一個解決方案。Cypher計數返回null而不是0

START bp=node({startnodeid}) 
WITH bp 
MATCH (bp)<-[r1?:VIEWED_PROFILE]-() 
WHERE r1.timestamp > {weekStart} AND r1.timestamp < {firstDay} 
WITH count(r1) AS dayOne, bp 
MATCH (bp)<-[r2?:VIEWED_PROFILE]-() 
WHERE r2.timestamp > {firstDay} AND r2.timestamp < {secondDay} 
WITH count(r2) AS dayTwo, dayOne, bp 
MATCH (bp)<-[r3?:VIEWED_PROFILE]-() 
WHERE r3.timestamp > {secondDay} AND r3.timestamp < {thirdDay} 
WITH count(r3) AS dayThree, dayTwo, dayOne, bp 
MATCH (bp)<-[r4?:VIEWED_PROFILE]-() 
WHERE r4.timestamp > {thirdDay} AND r4.timestamp < {fourthDay} 
WITH count(r4) AS dayFour, dayThree, dayTwo, dayOne, bp 
MATCH (bp)<-[r5?:VIEWED_PROFILE]-() 
WHERE r5.timestamp > {fourthDay} AND r5.timestamp < {fifthDay} 
WITH count(r5) AS dayFive, dayFour, dayThree, dayTwo, dayOne, bp 
MATCH (bp)<-[r6?:VIEWED_PROFILE]-() 
WHERE r6.timestamp > {fifthDay} AND r6.timestamp < {sixthDay} 
WITH count(r6) AS daySix, dayFive, dayFour, dayThree, dayTwo, dayOne, bp 
MATCH (bp)<-[r7?:VIEWED_PROFILE]-() 
WHERE r7.timestamp > {sixthDay} AND r7.timestamp < {seventhDay} 
RETURN count(r7) AS daySeven, daySix, dayFive, dayFour, dayThree, dayTwo, dayOne 

由於統計學的原因,我需要前7天的配置文件視圖。

新控制檯:http://console.neo4j.org/?id=cy5v5k

在此控制檯例子中,時間戳是奇數在我的參數如下:

weekStart = 0; 
firstDay = 2; 
secondDay = 4; 
thirdDay = 6; 
fourthDay = 8; 
fifthDay = 10; 
sixthDay = 12; 
seventhDay = 14; 

和我預期的返回值如下:

dayOne = 1; 
dayTwo = 3; 
dayThree = 2; 
dayFour = 1; 
dayFive = 1; 
daySix = 4; 
daySeven = 0; 

回答

4

您使用的是2.0嗎?如果是這樣,你應該完全重新組織這個查詢,以便使用CASE/WHEN並在那裏突破你的一週的日子,而不是單獨做WITH條款。 http://console.neo4j.org/r/utsrzy

MATCH (n)-[r:VIEWED_PROFILE]->(p) 
RETURN sum(CASE WHEN r.timestamp > 0 AND r.timestamp < 2 THEN 1 ELSE 0 END) AS day1, 
     sum(CASE WHEN r.timestamp > 2 AND r.timestamp < 4 THEN 1 ELSE 0 END) AS day2, 
     sum(CASE WHEN r.timestamp > 4 AND r.timestamp < 6 THEN 1 ELSE 0 END) AS day3, 
     sum(CASE WHEN r.timestamp > 6 AND r.timestamp < 8 THEN 1 ELSE 0 END) AS day4, 
     sum(CASE WHEN r.timestamp > 8 AND r.timestamp < 10 THEN 1 ELSE 0 END) AS day5, 
     sum(CASE WHEN r.timestamp > 10 AND r.timestamp < 12 THEN 1 ELSE 0 END) AS day6, 
     sum(CASE WHEN r.timestamp > 12 AND r.timestamp < 14 THEN 1 ELSE 0 END) AS day7 

如果您使用1.9,而不是count(r7)等,做count(1)

更新,該快速修復不適用於1.9。這裏有一個比特收集操作來獲得1.9爲你做到這一點:

http://console.neo4j.org/r/cata9u

START bp=node(1) 
MATCH (bp)<-[r1?:VIEWED_PROFILE]-() 
WITH collect(r1.timestamp) AS times 
RETURN length(filter(t IN times WHERE t > 0 AND t < 2)) AS day1, 
     length(filter(t IN times WHERE t > 2 AND t < 4)) AS day2, 
     length(filter(t IN times WHERE t > 12 AND t < 14)) AS day7 
+0

我希望我用2.0。我使用1.9。 – user1325194

+0

你能解釋一下在這種情況下計算(1)的數量嗎?我從來沒有見過它像以前那樣使用。 – user1325194

+0

實際上,count(1)仍然沒有返回。 – user1325194