0

各IDで挿入された最後の行を時間順で選択したい DESC

s.no     id    message           status     time
1        3     this is msg 1     unread     100001
2        2     this is msg 2     read       100002
3        4     this is msg 3     read       100003
4        3     this is msg 4     unread     100004
5        2     this is msg 5     read       100005
6        3     this is msg 6     unread     100006

私は使っている

select * from table group by id order by MAX(time) DESC

それは正しいidシーケンスを与えていますが、行は交換され

ています。

s.no     id    message           status     time
6        3     this is msg 6     unread     100006
5        2     this is msg 5     read       100005
3        4     this is msg 3     read       100003

助けてください

4

2 に答える 2

5

最大時間を別のサブクエリとして引き出して、それをテーブルに結合することができます。最大時間が重複している場合、ID に対して複数の行が返されます。

select 
    t.s.no,
    t.id
    t.message,
    t.status,
    t.time
from 
    table t
        inner join (
        select
            id,
            max(time) maxtime
        from
            table
        group by
            id
   ) mt
       on mt.id = t.id and t.time = mt.maxtime
order by
    t.time desc
于 2013-10-13T11:45:35.027 に答える
1

これを試して:

select * from `table` t
join (
  SELECT id, MAX(`time`) max_t
  FROM `table`
  GROUP BY id
  ) m
on (t.id=m.id and t.`time`=m.max_t)
order by m.max_t desc
于 2013-10-13T11:54:55.120 に答える