2014-10-17 26 views
0

我還是一個SQL新手,在SQLite3測試數據庫中播放。我試着在網上挖掘這個答案,但找不到答案。我無法通過WHERE之前的GROUP BY聲明排除某些組。SQL:WHERE語句可以篩選出GROUP BY的特定組聲明

這裏是我的查詢:

SELECT USER_ID, SESSION_ID, MAX(SESSION_DURATION), MAX(TIME_STAMP) 
FROM table 
WHERE SESSION_ID <> 0 
GROUP BY USER_ID, SESSION_ID 

基本上在我的數據庫中有行,其中會話ID爲0,我想將設法組起來之前,排除那些行。但是,結果返回組會話ID爲0

感謝您的幫助!

更新1

到sqlfiddle(下同),而創建一個簡單的測試數據庫查詢實際工作類似。

我實際上使用Python和SQLite3庫將15 K行CSV文件導入數據庫並運行查詢。自從我的測試表正在工作以來,顯然有些東西是導致我導入代碼的原因。我會一直公佈你發現的內容。感謝大家的幫助。

更新2

現在我過我的導入代碼使用相同的測試表和查詢工作使用這個非常簡單的CSV文件中篩選出0組。不幸的是,我不能發佈多個鏈接,否則我會發布我的簡單測試CSV

但是,用我的15 K CSV文件,它不起作用。這裏是一個鏈接到15 K文件 https://dl.dropboxusercontent.com/u/69835430/sql_session_data.csv

是否有任何特定的邊緣情況,我錯過了?

更新3 - 最後的答案

由於CL的回答以下關於我的INTEGER列的字符串值。我挖掘了我正在使用的SQLite3模塊。

我正在使用sqlite3.dictreader並傳入默認讀取值。我通過添加一個==''檢查解決我的CSV文件之前,將數據放入數據庫。

謝謝大家的幫助!

+0

我會嘗試創建一個更小的測試數據庫來運行它。對不起,不能傳出實際的。我還使用SQLite專業個人3.5.6來運行我的查詢和管理,如果這有所作爲? – ETam 2014-10-17 23:15:24

+0

我創建SESSION_ID作爲一個整數。每個用戶都分配了一個獨特的基於Int的會話ID – ETam 2014-10-17 23:18:25

回答

0
> SELECT 0 <> 0; 
0 
> SELECT '0' <> 0; 
1 

你在你的數據庫中有字符串值。 修復它們:

UPDATE MyTable 
SET Session_ID = CAST(Session_ID AS INTEGER); 
+0

謝謝CL!這確實是問題所在。我看着我的導入代碼來處理這些特定的情況,並看到爲什麼SQLite3編寫器不處理這種情況。 – ETam 2014-10-20 16:50:22

0

您的方法適用於我(與預期的情況一樣)使用簡單的數據集。

sqlfiddle

create table tbl (user_id int, session_id int, duration int); 
insert into tbl values (1,0,10); 
insert into tbl values (1,1,2); 
insert into tbl values (2,1,1); 
insert into tbl values (3,2,1); 
insert into tbl values (4,2,5); 

SELECT USER_ID, SESSION_ID, MAX(duration), count(1) 
FROM tbl 
WHERE SESSION_ID <> 0 
GROUP BY USER_ID, SESSION_ID