关于mysql:以desc顺序选择唯一行

selecting unique rows in desc order

本问题已经有最佳答案,请猛点这里访问。

我想按时间DESC选择每个id顺序插入的最后一行

1
2
3
4
5
6
7
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

我在用

它给出了正确的id序列但是行互换了
我希望它像:

1
2
3
4
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

帮帮我


您可以将最大时间作为单独的子查询拉出,然后将其重新连接到表中。 如果它具有重复的最大时间,则将为id返回多行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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


试试这个:

1
2
3
4
5
6
7
8
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