可能大家都遇到过。
我想取某个相同字段的最新的一条记录,比如:
name created_at
abc 20081012
def 20081112
abc 20081013
我想要返回
name created_at
abc 20081013
def 20081112
想到了group by但是得到的结果是
name created_at
abc 20081012
def 20081112
如何让group by里面被group的item也排序?
[b]问题补充:[/b]
order by 不行。order by只能对group 后的次序进行排序。
wangxuliangboy的方法可以,但是我可能没有说清楚我的需求,不好意思。
我需要的这个字段是没有max的。还是上面的例子的话:
name body created_at
abc body1 20081012
def body2 20081112
abc body3 20081013
我需要返回:
name body created_at
def body2 20081112
abc body3 20081013
而不是:
name body created_at
def body2 20081112
abc body1 20081012
虽然这两个都是order by created_at DESC的。所以aidiyuxin同学的方法不行。
[b]问题补充:[/b]
max(body)不行。我要的是max(created_at)对应的body而不是max(body)
[b]问题补充:[/b]
可能大家都遇到过。
我想取某个相同字段的最新的一条记录,比如:
name created_at
abc 20081012
def 20081112
abc 20081013
我想要返回
name created_at
abc 20081013
def 20081112
想到了group by但是得到的结果是
name created_at
abc 20081012
def 20081112
如何让group by里面被group的item也排序?
[b]问题补充:[/b]
order by 不行。order by只能对group 后的次序进行排序。
wangxuliangboy的方法可以,但是我可能没有说清楚我的需求,不好意思。
我需要的这个字段是没有max的。还是上面的例子的话:
name body created_at
abc body1 20081012
def body2 20081112
abc body3 20081013
我需要返回:
name body created_at
def body2 20081112
abc body3 20081013
而不是:
name body created_at
def body2 20081112
abc body1 20081012
虽然这两个都是order by created_at DESC的。所以aidiyuxin同学的方法不行。
[b]问题补充:[/b]
max(body)不行。我要的是max(created_at)对应的body而不是max(body)
to foxgst:
我用的是Mysql, 你的方法不行。已下的语句是我用的:
[code="Sql"]SELECT msg.id, msg.body, max(msg.created_at) FROM shoofr_test.message_recipients m LEFT OUTER JOIN shoofr_test.messages msg ON msg.id = m.message_id group by msg.subject order by msg.id DESC[/code]
选出来的确实是max(created_at)但是其对应的不是自己的body, 而还是msg.id最小的那个对应的id. 所以order by msg.id只对gruop后的结果有效而group和max会产生错位的奇怪现象 ;)