2012-10-04 84 views
0

所以我想在一列中搜索最大时间:SQL SELECT给出另一个查询

sqlite> SELECT max(strftime('%Y-%m-%d %H:%M',time)) FROM posts WHERE thread_id=123456; 
2012-10-02 02:31 

对于每个THREAD_ID这个查询返回:

sqlite> SELECT thread_id FROM threads WHERE out_of_date=0; 
111 
123 
187 
... 

然后我想搜索对于last_post字段与第一个查询返回的time字段不匹配并将out_of_date字段设置为1的所有线程:

sqlite> UPDATE threads SET out_of_date=1 WHERE thread_id=123456 AND last_post!='2012-10-02 02:31'; 

问题是,我不太确定我应该如何组合这三个单独的查询。有什么想法吗?

回答

1

以下SQL应正确更新线程表。它使用相关的子查询来组合第1个和第3个查询。这可以通过添加WHERE子句与第二个查询结合使用。

UPDATE threads T 
SET out_of_date = 1 
WHERE out_of_date = 0 
    AND last_post != (
     SELECT MAX(strftime('%Y-%m-%d %H:%M',time)) 
     FROM posts 
     WHERE thread_id = T.thread_id 
    ) 
; 
+0

优秀!非常感谢!顺便说一下,你的意思是单独放置'strftime'吗?这似乎是要求选择不存在的strftime列的最大值。 – wrongusername

+0

@wrongusername我用一个名为'strftime'的列对它进行了测试,但忘了在答案中改变它!感谢您指出了这一点。 – acatt