/ db / test / sql /
/db/test/sql/groupmoms_day2
1 -- Copyright (C) 2013 The Meme Factory, Inc., http://www.meme.com/
2 --
3 -- This file is part of Gombe-MI.
4 --
5 -- Gombe-MI is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
9 --
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
14 --
15 -- You should have received a copy of the GNU General Public License
16 -- along with Gombe-MI. If not, see <http://www.gnu.org/licenses/>.
17 --
18 -- Add the moms of the follows as groupmembers to the existing groups
19 -- (for all (9am to 5pm) intervals of follows 3-4,
20 -- the follows of the second day).
21 --
22 -- All data appearing in this work are fictitious. Any resemblance to
23 -- actual data, living or archived, is purely coincidental.
24 --
25 -- Karl O. Pinc <kop@meme.com>
26 --
27
28 --
29 -- Main tables.
30 --
31
32 do $$
33 declare
34 this_time time;
35 this_mom varchar array;
36 a_mom varchar;
37 begin
38
39 -- Find the mom for each of the 4 follows.
40 for fid in 3 .. 4 loop
41 select followparts.chimpid
42 into strict a_mom
43 from followparts
44 join followroles on (followroles.role = followparts.role)
45 where followparts.followid = fid
46 and followroles.function = 'M';
47 this_mom[fid] := a_mom;
48 end loop;
49
50 -- The group composition is all taken at 5 minute intervals so use
51 -- that to find the groups.
52
53 this_time := '9:00';
54 while this_time <= '17:00' loop
55
56 for fid in 3 .. 4 loop
57 -- Give each of the groups a mom.
58 insert into groupmembers (gid, chimpid, uncertain)
59 select intervals.gid, this_mom[fid], 'f'
60 from intervals
61 where intervals.followid = fid
62 and intervals.time = this_time;
63 end loop;
64
65 this_time := this_time + '5 minute'::interval;
66 end loop;
67 end;
68 $$;
69