我有一张表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
注意不是每天都要参加。 请帮忙
答案 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;