2016-06-24 28 views
0

我有一個表temp_user_notes是用戶表的臨時表和說明表怎樣才能得到SQL的結果,此表

其結構

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 

我有兩個類型的用戶,一個與current_version = old_version和第二current_version != old_version。我試圖獲得那些第二用戶的note_id,但只有那些在更新日期之後創建的筆記。

此外,沒有更新日期的第一類用戶的所有筆記。

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; 

我不知道如何進一步處理。

回答

0

首先,您需要在表中添加一個字段,用於記錄何時使用CURRENT_TIMESTAMP屬性添加它(稱爲create_date)。您的查詢應該如下所示:

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

假設每個user_id最多有2個條目。

/* 
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