2011-03-22 163 views
2

我有一個'cellid''date'(datetime)和'block'(real)列的表。有沒有更好的方法來做到這一點?

我正試圖找到所有在過去3天裏block> 1的id。

目前,我正在做這樣的:

cells = npar.db.execute("SELECT cellid FROM data WHERE block > 1 AND date=?", (files[0][1],)).fetchall() 
cells1 = npar.db.execute("SELECT cellid FROM data WHERE block >1 AND date = ?", (files[1][1],)).fetchall() 
self.common(cells,cells1) 
cells1 = npar.db.execute("SELECT cellid FROM data WHERE block >1 AND date = ?", (files[2][1],)).fetchall() 
self.common(cells,cells1) 

print len(cells) 
def common(self,a,b): 
    for item in a: 
      if item not in b: 
       a.remove(item) 

b = npar.db.execute("SELECT cellid FROM data WHERE block > 1 AND date >= ? GROUP BY cellid HAVING COUNT(cellid) = 3", (files[2][1],)).fetchall() 
     print len(b) 

LEN(B)不等於LEN(細胞)

+0

你的「HAVING COUNT(cellid)= 3」子句是沒有意義的。您最後的查詢只會選擇那些正好出現三個blockid> 1且date> =您的時間限制的cellid。 – 2011-03-22 16:26:25

+0

這正是我想要的,我想知道它爲什麼不等於len(cells) – jck 2011-03-23 05:25:32

回答

3

「爲過去的3天」?所以下面可以工作?

cells = npar.db.execute("SELECT cellid FROM data " 
         "WHERE block > 1 " 
         "AND date >= ? " 
         "GROUP BY cellid " 
         "HAVING COUNT(*) = 3", (files[0][1],)).fetchall() 
+0

我意識到我的原始算法在第一位是錯誤的。 我需要找到這3個查詢中的常見元素,我糾正後,我得到了352個結果,你的查詢如何,我只得到282個結果... – jck 2011-03-22 13:41:05

+0

你可以發佈你的'listsub'代碼嗎? – eumiro 2011-03-22 13:55:15

+0

在問題中編輯。 – jck 2011-03-22 14:10:59

相關問題