急问个 sql问题?

2014-01-16 11:59:53 +08:00
 yjsslab
select t.a,t.b from t where t.c in (1, 2, 3, 4, 5) order by created_at desc;
怎么让每个 c 只返回一个结果?即最新created_at desc那个.
如果直接这样:
select t.a,t.b from t where t.c in (1, 2, 3, 4, 5) order by created_at desc limit 1;
就全部一个结果.

因为 select t.a,t.b from t where t.c = 1/2/3/4/5 每个都会返回多个结果
2420 次点击
所在节点    问与答
11 条回复
manhere
2014-01-16 12:04:29 +08:00
既然是一个,为什么还要用in() ?
jandan
2014-01-16 12:07:06 +08:00
多个结果是否一样?若是distinct。
yjsslab
2014-01-16 12:08:24 +08:00
@manhere 因为 in( .. 有很多个,一个一个可能慢点), 要是没办法,也只能一个一个来。
因为 in 每一个都有多个结果
yjsslab
2014-01-16 12:09:24 +08:00
怎么不能改帖子了????
yjsslab
2014-01-16 12:11:03 +08:00
@manhere
@jandan 形象一点:找一组帖子的最新那条评论。
manhere
2014-01-16 12:14:20 +08:00
@yjsslab 可以全读出来让程序处理排序
yjsslab
2014-01-16 12:17:04 +08:00
@manhere 就是因为这样太慢,相当于每个帖子有几百条评论,然后一次要查几十到百个帖子。
clino
2014-01-16 12:24:55 +08:00
@yjsslab 给帖子增加一个最新评论的字段,每次有新评论就更新这个字段
Maslino
2014-01-16 12:27:56 +08:00
@yjsslab 试试group by和子查询
sun1991
2014-01-16 12:56:54 +08:00
如果是Oracle的话, 参见row_number, partition by
http://www.java2s.com/Tutorial/Oracle/0320__Analytical-Functions/ROWNUMBERwithPartition.htm

SQL Server应该有类似写法. 别的就不知道了
ETiV
2014-01-16 14:16:47 +08:00
有自增序号(id)不?

select MAX(t.id), t.a,t.b from t where t.c in (1, 2, 3, 4, 5) group by t.c;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/97221

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX