2017-01-03 1 views
0

Aus dieser Datenbank stucture verprügelt zu werden ...Distinct wo Anweisung

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 
); 

Mit diesen Daten ...

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); 

Und mit dieser Abfrage

SELECT DISTINCT powId, timeStart, timeEnd FROM points WHERE userId != 1;

I‘ Ich bekomme nicht das Ergebnis, das ich möchte.

Die letzten zwei Einträge in der Datenbank, was ich gerade suche. userId wird für die ersten diese beiden Einträge gesetzt, aber die zweiten Eingabemasken der userId und es gibt nach wie vor, dass unterschiedliche Reihe jetzt. Gibt es etwas, das ich auf diese Abfrage tun kann, um es nicht eindeutige Reihe zurück, wo die userId innerhalb des unterscheidbaren Satzes ist?

Ich möchte basiclly alle Punkte erhalten, die die userId nicht zugeordnet ist. Wie mache ich das? Ich dachte, es wäre so einfach, aber es ist nicht so.

Bitte nur SQLite Antworten.

Antwort

1

Sie haben alle (anderen) Zeilen mit den gleichen Spaltenwerte zu überprüfen:

SELECT DISTINCT powId, 
       timeStart, 
       timeEnd 
FROM points 
WHERE NOT EXISTS (SELECT 1 
        FROM points AS p2 
        WHERE p2.powId  = points.powId 
        AND p2.timeStart = points.timeStart 
        AND p2.timeEnd = points.timeEnd 
        AND p2.userId = 1);