私はあなたがuser
がthe same date
上same center
で2 or more exams
を持っていたレコードを求めているあなたの質問を解釈してきた道...
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
が最も支配的な因子であり、その中でExam Date
であり、その内で0とcount
がExams
であることを示唆しています。したがって、私の内側SELECT
ステートメントからのGROUP BY
とCOUNT()
行。
他の選択した3つのフィールドがある一部GROUP BY
がそれらを使用するため、SELECT
の一部となるためにそれらを必要とするため、部分的に、彼らは私があなたのテーブルのために仮定したINNER JOIN
tblExams
で(名前を形成するのに必要とされているので、データ)。 (注:単語JOIN
の前に結合タイプがない場合は、INNER JOIN
が実行されます)。 INNER JOIN
は、ここで対応する行(複数可)にそのUser
ためそのDate
にそのExam Center
で行われる試験の数に粘着効果を有します。
次に、tblExams
の各行のすべてのフィールドを選択するだけです。その数は少なくとも2
です。私はあるExam Centers
のリストを取得するには最も内側のSELECTステートメントを使用して、このクエリで
私はあなたの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;
各User
には、それぞれDates
が付いています。
このデータ
は、各
DATE
上
Exam
のための各
User
出席は、彼らがそうするどのように多くの
Centers
のリストを形成するために、中間最も
SELECT
文で使用されています。
このカウントは、外側のSELECT
によって、指定された基準を満たすtblExams
の行のみを返すために使用されます。
ご不明な点がございましたら、お気軽にコメントを投稿してください。
スケジュール競合、つまり2つの試験が同じ時間にスケジュールされているかどうかを確認する必要がありますか? – toonice
はい、基本的には、ユーザーが複数の試験を1日に行っているかどうかを確認する必要があります。同じ試験所に同じセンターを与えて、センター間を移動する必要はありません。また、同じ日に複数の試験を同じセンターで行っている場合は、可能であればシフトを中断する必要があります。つまり、シフト1とシフト2で試験を受ける場合は、シフト3に再割り当てします私はこの報告書が必要です – ashishjmeshram
'Sr.No'(' srNum'への変更をお勧めします)がプライマリキーであると仮定して正しいですか? – toonice