2017-01-09 32 views
0

我有這兩個表。返回沒有匹配的列內的計數

派遣

CREATE TABLE dispatch (
    ID INTEGER PRIMARY KEY NOT NULL, 
    FDID INTEGER, 
    COUNTYNUM TEXT, 
    TRANS1 TEXT 
); 

有了這些數據...

INSERT INTO "dispatch" ("ID","FDID","COUNTYNUM","TRANS1") VALUES ('470638','28','201612310026','2016-12-31T00:26:41.123-05:00'); 
INSERT INTO "dispatch" ("ID","FDID","COUNTYNUM","TRANS1") VALUES ('470640','26','201612310031','2016-12-31T00:31:34.747-05:00'); 
INSERT INTO "dispatch" ("ID","FDID","COUNTYNUM","TRANS1") VALUES ('470670','26','201612311136','2016-12-31T11:36:33.323-05:00'); 
INSERT INTO "dispatch" ("ID","FDID","COUNTYNUM","TRANS1") VALUES ('470688','26','201612311332','2016-12-31T13:32:09.940-05:00'); 
INSERT INTO "dispatch" ("ID","FDID","COUNTYNUM","TRANS1") VALUES ('470719','26','201612311929','2016-12-31T19:29:23.487-05:00'); 
INSERT INTO "dispatch" ("ID","FDID","COUNTYNUM","TRANS1") VALUES ('470749','28','201612312301','2016-12-31T23:02:06.607-05:00'); 
INSERT INTO "dispatch" ("ID","FDID","COUNTYNUM","TRANS1") VALUES ('470769','26','201701010033','2017-01-01T00:33:46.750-05:00'); 
INSERT INTO "dispatch" ("ID","FDID","COUNTYNUM","TRANS1") VALUES ('470849','28','201701012101','2017-01-01T21:01:38.073-05:00'); 
INSERT INTO "dispatch" ("ID","FDID","COUNTYNUM","TRANS1") VALUES ('470880','28','201701020640','2017-01-02T06:41:10.087-05:00'); 
INSERT INTO "dispatch" ("ID","FDID","COUNTYNUM","TRANS1") VALUES ('470893','28','201701021110','2017-01-02T11:10:28.280-05:00'); 
INSERT INTO "dispatch" ("ID","FDID","COUNTYNUM","TRANS1") VALUES ('470912','28','201701021333','2017-01-02T13:33:31.247-05:00'); 
INSERT INTO "dispatch" ("ID","FDID","COUNTYNUM","TRANS1") VALUES ('470915','26','201701021350','2017-01-02T13:50:48.440-05:00'); 
INSERT INTO "dispatch" ("ID","FDID","COUNTYNUM","TRANS1") VALUES ('470918','28','201701021416','2017-01-02T14:16:37.833-05:00'); 
INSERT INTO "dispatch" ("ID","FDID","COUNTYNUM","TRANS1") VALUES ('470935','26','201701021546','2017-01-02T15:46:07.347-05:00'); 
INSERT INTO "dispatch" ("ID","FDID","COUNTYNUM","TRANS1") VALUES ('470960','28','201701022009','2017-01-02T20:09:33.177-05:00'); 

CREATE TABLE points (
    rowid INTEGER PRIMARY KEY, 
    powId INTEGER, 
    userId INTEGER, 
    timeStart DATETIME, 
    timeEnd DATETIME, 
    points NUMERIC, 
    COUNTYNUM NUMERIC, 
-- FOREIGN KEY(powId) REFERENCES points_power(powId) 
-- FOREIGN KEY(userId) REFERENCES users(userId) 
    UNIQUE(userId, timeStart, COUNTYNUM) ON CONFLICT IGNORE 
); 

有了這些數據...

INSERT INTO "points" ("rowid","powId","userId","timeStart","timeEnd","points","COUNTYNUM") VALUES ('1','7','2','2016-12-31T19:29:23-0500','2016-12-31T20:29:23-0500','2','201612311929'); 
INSERT INTO "points" ("rowid","powId","userId","timeStart","timeEnd","points","COUNTYNUM") VALUES ('2','7','4','2016-12-31T19:29:23-0500','2016-12-31T20:29:23-0500','2','201612311929'); 
INSERT INTO "points" ("rowid","powId","userId","timeStart","timeEnd","points","COUNTYNUM") VALUES ('3','7','12','2016-12-31T19:29:23-0500','2016-12-31T20:29:23-0500','2','201612311929'); 
INSERT INTO "points" ("rowid","powId","userId","timeStart","timeEnd","points","COUNTYNUM") VALUES ('4','7','16','2016-12-31T19:29:23-0500','2016-12-31T20:29:23-0500','2','201612311929'); 
INSERT INTO "points" ("rowid","powId","userId","timeStart","timeEnd","points","COUNTYNUM") VALUES ('5','7','585','2017-01-02T15:46:07-0500','2017-01-02T16:46:07-0500','2','201701021546'); 
INSERT INTO "points" ("rowid","powId","userId","timeStart","timeEnd","points","COUNTYNUM") VALUES ('6','7','2','2017-01-02T15:46:07-0500','2017-01-02T16:46:07-0500','2','201701021546'); 
INSERT INTO "points" ("rowid","powId","userId","timeStart","timeEnd","points","COUNTYNUM") VALUES ('7','7','12','2017-01-02T15:46:07-0500','2017-01-02T16:46:07-0500','2','201701021546'); 
INSERT INTO "points" ("rowid","powId","userId","timeStart","timeEnd","points","COUNTYNUM") VALUES ('9','7','11','2017-01-02T15:46:07-0500','2017-01-02T16:46:07-0500','2','201701021546'); 
INSERT INTO "points" ("rowid","powId","userId","timeStart","timeEnd","points","COUNTYNUM") VALUES ('10','7','593','2017-01-02T15:46:07-0500','2017-01-02T16:46:07-0500','2','201701021546'); 
INSERT INTO "points" ("rowid","powId","userId","timeStart","timeEnd","points","COUNTYNUM") VALUES ('11','7','14','2017-01-02T15:46:07-0500','2017-01-02T16:46:07-0500','2','201701021546'); 
INSERT INTO "points" ("rowid","powId","userId","timeStart","timeEnd","points","COUNTYNUM") VALUES ('12','7','13','2017-01-02T15:46:07-0500','2017-01-02T16:46:07-0500','2','201701021546'); 
INSERT INTO "points" ("rowid","powId","userId","timeStart","timeEnd","points","COUNTYNUM") VALUES ('13','7','11','2017-01-02T13:50:48-0500','2017-01-02T14:50:48-0500','2','201701021350'); 
INSERT INTO "points" ("rowid","powId","userId","timeStart","timeEnd","points","COUNTYNUM") VALUES ('14','7','16','2017-01-02T15:46:07-0500','2017-01-02T16:46:07-0500','2','201701021546'); 
INSERT INTO "points" ("rowid","powId","userId","timeStart","timeEnd","points","COUNTYNUM") VALUES ('15','7','16','2017-01-01T00:33:46-0500','2017-01-01T01:33:46-0500','2','201701010033'); 
INSERT INTO "points" ("rowid","powId","userId","timeStart","timeEnd","points","COUNTYNUM") VALUES ('16','7','2','2017-01-02T13:50:48-0500','2017-01-02T14:50:48-0500','2','201701021350'); 
INSERT INTO "points" ("rowid","powId","userId","timeStart","timeEnd","points","COUNTYNUM") VALUES ('17','13','1','2017-01-02T17:00:00-0500','2017-01-02T21:00:00-0500','1',NULL); 
INSERT INTO "points" ("rowid","powId","userId","timeStart","timeEnd","points","COUNTYNUM") VALUES ('18','13','2','2017-01-02T17:00:00-0500','2017-01-02T21:00:00-0500','1',NULL); 

我試圖根據這兩個表格生成報告。所以我使用了這個查詢,但它並沒有給我輸出我想要的。

SELECT strftime('%Y', TRANS1) AS Year, strftime('%m', TRANS1) AS Month, COUNT(*) AS Incidents, (SELECT COUNT(COUNTYNUM) FROM points WHERE dispatch.COUNTYNUM = points.COUNTYNUM) AS Zero FROM dispatch WHERE FDID = 26 GROUP BY Year, Month; 

我越來越...

Year Month Incidents Zero 
2016 12  3   0 
2017 01  4   8 

當我做這個查詢...

SELECT ID, FDID, COUNTYNUM, TRANS1, (SELECT COUNT(*) FROM points WHERE points.COUNTYNUM = dispatch.COUNTYNUM) AS Zero FROM dispatch WHERE FDID = 26 AND Zero = 0; 

我得到正確的結果......

ID  FDID COUNTYNUM  TRANS1       Zero 
470640 26 201612310031 2016-12-31T00:31:34.747-05:00 0 
470670 26 201612311136 2016-12-31T11:36:33.323-05:00 0 
470688 26 201612311332 2016-12-31T13:32:09.940-05:00 0 

這是正確的,但它意味着以前的查詢應該已經返回了這個表。

Year Month Incidents Zero 
2016 12  4   1 
2017 01  3   0 

因爲COUNTYNUM201612311929是不是在結果集。

我不確定我現在是否對此有任何意義。這個盒子裏的Rubby ducky調試實際上讓我更加困惑。主要是因爲我給出的示例數據集產生了與我的實際生產數據集不同的結果。如果有人對我想要做的事有任何想法,我會很感激這個幫助。

回答

0

這些都是您的查詢的相關部分:

SELECT ..., 
     (SELECT ... WHERE ... = dispatch.COUNTYNUM) 
FROM dispatch 
GROUP BY Year, Month; 

相關子查詢是指COUNTYNUM列,但這不是由該表進行分組這些列中的一個。這意味着對於每個結果行,組中有多個可能的值COUNTYNUM。你得到的是隨機的。 (這是爲了與MySQL兼容;其他數據庫報告錯誤。)