我有一个表的结构,如下图所示。基本上,它有像u1、u2这样的用户in,他们将在给定的日期在给定的考试中心/地点进行E1、E2等考试,比如shift 1,shift 2等。一天最多有4班,轮班数不多。从1到4。
在这个表中,我需要找出同一用户在相同的日期和中心进行考试,但连续轮班的行。例如,U1在同一中心进行两次考试,即1和2连续轮班的图像中突出显示的红色行。用户在连续4次轮班的一天内进行最多4次考试。
我想写的另一个查询是,如果同一个用户在同一日期进行两次或两次以上的考试,但在不同的中心进行考试,那么在哪里。用蓝色高亮显示的行。

发布于 2017-04-08 04:37:42
请试试..。
SELECT tblExams.srNum AS srNum,
tblExams.user_id AS user_id,
tblExams.exam_id AS exam_id,
tblExams.exam_date AS exam_date,
tblExams.exam_center_id AS exam_center_id,
tblExams.exam_shift as exam_shift
FROM tblExams
JOIN
{
SELECT user_id AS user_id,
exam_date AS exam_date,
exam_center_id AS exam_center_id,
COUNT( exam_center_id ) AS exam_center_id_count
FROM tblExams
GROUP BY user_id,
exam_date,
exam_center_id
} exam_center_counter ON tblExams.user_id = exam_center_counter.user_id
AND tblExams.exam_date = exam_center_counter.exam_date
AND tblExams.exam_center_id = exam_center_counter.exam_center_id
WHERE exam_center_counter.exam_center_id_count >= 2;我解释你的问题的方式--你要求的是user在same center on the same date中有2 or more exams的记录。这向我表明,User是最主要的因素,在Exam Date中,在Centers和count of Exams中。因此,GROUP BY和COUNT()行从我的内部SELECT语句。
其他三个选定字段的存在部分是因为GROUP BY使用它们,因此需要它们成为SELECT的一部分,部分原因是需要使用tblExams (我为您的数据表使用的名称)组成INNER JOIN。(注意:如果单词JOIN的前面没有连接类型,则执行INNER JOIN )。
INNER JOIN在这里的作用是将在该Date上的User上发生的考试计数加到相应的行上。
然后,我们所需要做的就是从tblExams中的每一行中选择所有字段,其中的计数至少是2。
当我为您的第二个查询构造以下代码时,使用了该逻辑的一个变体.
SELECT tblExams.srNum AS srNum,
tblExams.user_id AS user_id,
tblExams.exam_id AS exam_id,
tblExams.exam_date AS exam_date,
tblExams.exam_center_id AS exam_center_id,
tblExams.exam_shift as exam_shift
FROM tblExams
JOIN
{
SELECT user_id AS user_id,
exam_date AS exam_date,
COUNT( exam_center_id ) AS exam_center_count
FROM
{
SELECT user_id AS user_id,
exam_date AS exam_date,
exam_center_id AS exam_center_id
FROM tblExams
GROUP BY user_id,
exam_date,
exam_center_id
} exam_center_id_grouper
GROUP BY user_id,
exam_date
} exam_center_counter ON tblExams.user_id = exam_center_counter.user_id
AND tblExams.exam_date = exam_center_counter.exam_date
WHERE exam_center_counter.exam_center_count >= 2;在这个查询中,我使用最内部的SELECT语句来获得一个Exam Centers列表,每个User在不同的Dates上都会参与其中。
然后,最中间的SELECT语句使用这些数据来形成一个列表,列出每个User在每个DATE上为一个Exam参加了多少个Exam。
最外层的SELECT使用此计数只返回符合指定条件的tblExams中的行。
如果您有任何问题或意见,请随时发表相应的评论。
https://stackoverflow.com/questions/43290070
复制相似问题