2016-06-24 2 views
0

ich einen Tisch temp_user_notes haben, die die temporäre Tabelle der Benutzertabelle ist, und stellt fest TabelleWie kann für diese Tabelle Ergebnis von SQL erhalten

Seine Struktur

id user_id note_id current_version old_version updated_date note_date 
1 2     4    3   2016-17-12 
2 3     4    3   2016-17-12 
3 4     4    4   
4 2  40            2016-18-12 
5 3  45            2016-18-12 
6 4  41            2016-18-12 

ist, ich habe zwei Arten von Benutzern, ein mit current_version = old_version und zweiten current_version != old_version. Ich versuche, note_id dieser zweiten Benutzer zu erhalten, aber nur die Notizen, die nach dem aktualisierten Datum erstellt werden.

Auch alle Notizen des ersten Typs Benutzer, die Datum nicht aktualisiert haben.

SELECT * FROM temp_user_notes 
WHERE user_id IN 
    (SELECT DISTINCT user_id 
    FROM temp_user_notes 
    WHERE current_version = old_version); 

SELECT DISTINCT user_id, version_number_updated_at FROM temp_user_notes 
WHERE current_version != previous_version 
GROUP BY user_id, version_number_updated_at; 

Ich weiß nicht weiter.

Antwort

0

Zuerst müssen Sie Ihrer Tabelle ein Feld hinzufügen, das darüber informiert, wann es mit der CURRENT_TIMESTAMP -Eigenschaft hinzugefügt wurde, z. B. create_date. Ihre Abfrage sollte etwa so aussehen:

SELECT node_id FROM temp_user_notes WHERE current_version != old_version AND updated_date < create_date 
0

Angenommen, Sie haben maximal 2 Einträge pro user_id.

/* 
DROP TABLE TEMP; 
CREATE TABLE TEMP (ID INT,USER_ID INT, NOTE_ID INT,CURRENT_VERSION INT,OLD_VERSION INT,UPDATE_DATE DATE,NOTE_DATE DATE); 
TRUNCATE TABLE TEMP; 
INSERT INTO TEMP VALUES 
(1 , 2 ,  NULL,    4 ,   3,   '2016-12-17' ,   NULL), 
(2 , 3 ,  NULL,    4 ,   3,   '2016-12-17' ,   NULL), 
(3 , 4 ,  NULL,    4 ,   4,   NULL,     NULL), 
(4 , 2 ,  40,   NULL,   NULL ,   NULL ,    '2016-12-18'), 
(5 , 3 ,  45,   NULL,   NULL,   NULL ,    '2016-12-18'), 
(6 , 4 ,  41,   NULL,   NULL,   NULL ,    '2016-12-18'); 
*/ 


SELECT T1.USER_ID,T2.NOTE_ID 
     #T1.* ,T2.* 
FROM TEMP T1 
INNER JOIN TEMP T2 ON T2.USER_ID = T1.USER_ID 
WHERE T2.ID > T1.ID 
     AND T1.CURRENT_VERSION <> T1.OLD_VERSION 
     AND T2.NOTE_DATE > T1.UPDATE_DATE 
Verwandte Themen