如何获取此表的sql结果

时间:2016-06-24 15:01:15

标签: mysql sql

我有一个表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;

我不知道如何继续前进。

2 个答案:

答案 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