私は学生のデータベースを持っています。
CREATE TABLE classlist
(`id` int, `studentid` int, `subjectid` int, `presentid` int)
;
CREATE TABLE student
(`id` int, `name` varchar(4))
;
CREATE TABLE subject
(`id` int, `name` varchar(4))
;
CREATE TABLE classStatus
(`id` int, `name` varchar(8))
;
INSERT INTO classlist
(`id`, `studentid`, `subjectid`, `presentid`)
VALUES
(1, 111, 1, 1),
(2, 222, 3, 0),
(3, 333, 2, 1),
(4, 111, 4, 1),
(5, 111, 1, 0),
(6, 222, 3, 0),
(7, 333, 2, 1),
(8, 111, 4, 1),
(9, 111, 2, 0),
(10, 111, 4, 1),
(11, 111, 1, 1),
(12, 333, 3, 1),
(13, 333, 2, 1),
(14, 333, 3, 1)
;
INSERT INTO student
(`id`, `name`)
VALUES
(111, 'John'),
(222, 'Kate'),
(333, 'Matt')
;
INSERT INTO subject
(`id`, `name`)
VALUES
(1, 'MATH'),
(2, 'ENG'),
(3, 'SCI'),
(4, 'GEO')
;
INSERT INTO classStatus
(`id`, `name`)
VALUES
(0, 'Absent'),
(1, 'Present')
;
そして、彼らが何回出席または欠席したかを示すクエリがあります。
SELECT
studentid,
students.name AS NAME,
SUM(presentid = 1) AS present,
SUM(presentid = 0) AS absent
FROM classlist
INNER JOIN student as students ON classlist.studentid=students.id
GROUP BY studentid, NAME
以下のこのフィドルを参照してください。 http://sqlfiddle.com/#!2/fe0b0/1
このサンプル データを見ると、サブジェクト ID 4 に出席すると、次のクラスに出席しないことが多いという傾向があるようです。これをクエリでキャプチャするにはどうすればよいですか。last subjectid = 4 のデータのみを表示したい。したがって、私の基準に一致するサンプルデータ行は次のようになります。
(5, 111, 1, 0),
(9, 111, 2, 0),
(11, 111, 1, 1),
これらの行はすべて、subjectid=4 を持つ学生 ID の次の行であるためです。
私の出力は
| STUDENTID | NAME | PRESENT | ABSENT|
| 111 | John | 1 | 2 |