我有一个表temp_user_notes
,它是用户表和注释表的临时表
其结构是
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 :(得分:0)
首先,您需要在表中添加一个字段,该字段使用CURRENT_TIMESTAMP属性跟踪它的添加时间,比如说它叫做create_date。您的查询应如下所示:
SELECT node_id FROM temp_user_notes WHERE current_version != old_version AND updated_date < create_date
答案 1 :(得分: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