mysql为每个组选择最后第n行

时间:2014-06-22 16:09:21

标签: mysql

我有一张表attendence_session,其中包含每个组(sem)的出勤日期。我希望得到每个小组的最后一次出席日期。意味着我想知道最近3次出席的日期。

表名attendence_session

id  sem date
1   3   2014-06-02
2   3   2014-06-03
3   3   2014-06-04
4   3   2014-06-05
5   3   2014-06-06
6   14  2014-05-01
7   14  2014-05-26
8   14  2014-05-27
9   14  2014-05-28
10  14  2014-05-29
11  14  2014-05-30
12  14  2014-05-31
13  14  2014-06-02
14  7   2014-06-01
15  7   2014-06-02
16  7   2014-06-03
17  7   2014-06-04
18  10  2014-06-02
19  10  2014-06-03
20  10  2014-06-04
21  10  2014-06-05
22  3   2014-06-07
23  3   2014-06-09
24  3   2014-06-10
25  3   2014-06-11
26  3   2014-06-12
27  3   2014-06-13
28  3   2014-06-14
29  3   2014-06-16

我想结果应该是这样的

sem     date
3       2014-06-13
7       2014-06-02
10      2014-06-03
14      2014-05-30

注意不是每天都要参加。 请帮忙

1 个答案:

答案 0 :(得分:2)

您可以使用标准SQL在where子句中执行此操作:

select a.*
from attendance_session ats
where 3 = (select count(*)
           from attendance_session ats2
           where ats.sem = ats2.sem and
                 ats2.date <= ats.date
          );

如果您只想要日期,还可以使用group_concat() / substring_index()技巧:

select a.sem,
       substring_index(substring_index(group_concat(date), ',', 3), ',', -1) as thirddate
from attendance_session ats
group by a.sem;