== **[[span(style=color: #FF0000, Напредни извештаи од базата (SQL и складирани процедури))]]** == **[[span(style=color: #BF1B1B, 1. Листање(приказ) на денешни events, count на денешни часови, испити и tasks:)]]** {{{ DECLARE correct_student_id INT; SET correct_student_id = 11111; WITH EventData AS ( SELECT ce.calendar_event_id, ce.event_name, ce.event_type, ce.event_start_time, ce.event_end_time, nre.event_date FROM student_event AS se JOIN calendar_event AS ce ON se.calendar_event_id = ce.calendar_event_id JOIN non_repeating_events AS nre ON ce.calendar_event_id = nre.calendar_event_id WHERE nre.event_date = CURRENT_DATE AND se.student_id = correct_student_id UNION SELECT ce.calendar_event_id, ce.event_name, ce.event_type, ce.event_start_time, ce.event_end_time, CASE WHEN re.event_week_day = 'MONDAY' THEN date_trunc('week', CURRENT_DATE)::DATE WHEN re.event_week_day = 'TUESDAY' THEN date_trunc('week', CURRENT_DATE) + interval '1 day'::DATE WHEN re.event_week_day = 'WEDNESDAY' THEN date_trunc('week', CURRENT_DATE) + interval '2 days'::DATE WHEN re.event_week_day = 'THURSDAY' THEN date_trunc('week', CURRENT_DATE) + interval '3 days'::DATE WHEN re.event_week_day = 'FRIDAY' THEN date_trunc('week', CURRENT_DATE) + interval '4 days'::DATE WHEN re.event_week_day = 'SATURDAY' THEN date_trunc('week', CURRENT_DATE) + interval '5 days'::DATE WHEN re.event_week_day = 'SUNDAY' THEN date_trunc('week', CURRENT_DATE) + interval '6 days'::DATE END AS event_date FROM student_event AS se JOIN calendar_event AS ce ON se.calendar_event_id = ce.calendar_event_id JOIN repeating_events AS re ON ce.calendar_event_id = re.calendar_event_id WHERE re.starting_date <= ( CASE WHEN re.event_week_day = 'MONDAY' THEN date_trunc('week', CURRENT_DATE)::DATE WHEN re.event_week_day = 'TUESDAY' THEN date_trunc('week', CURRENT_DATE) + interval '1 day'::DATE WHEN re.event_week_day = 'WEDNESDAY' THEN date_trunc('week', CURRENT_DATE) + interval '2 days'::DATE WHEN re.event_week_day = 'THURSDAY' THEN date_trunc('week', CURRENT_DATE) + interval '3 days'::DATE WHEN re.event_week_day = 'FRIDAY' THEN date_trunc('week', CURRENT_DATE) + interval '4 days'::DATE WHEN re.event_week_day = 'SATURDAY' THEN date_trunc('week', CURRENT_DATE) + interval '5 days'::DATE WHEN re.event_week_day = 'SUNDAY' THEN date_trunc('week', CURRENT_DATE) + interval '6 days'::DATE END ) AND re.ending_date >= ( CASE WHEN re.event_week_day = 'MONDAY' THEN date_trunc('week', CURRENT_DATE)::DATE WHEN re.event_week_day = 'TUESDAY' THEN date_trunc('week', CURRENT_DATE) + interval '1 day'::DATE WHEN re.event_week_day = 'WEDNESDAY' THEN date_trunc('week', CURRENT_DATE) + interval '2 days'::DATE WHEN re.event_week_day = 'THURSDAY' THEN date_trunc('week', CURRENT_DATE) + interval '3 days'::DATE WHEN re.event_week_day = 'FRIDAY' THEN date_trunc('week', CURRENT_DATE) + interval '4 days'::DATE WHEN re.event_week_day = 'SATURDAY' THEN date_trunc('week', CURRENT_DATE) + interval '5 days'::DATE WHEN re.event_week_day = 'SUNDAY' THEN date_trunc('week', CURRENT_DATE) + interval '6 days'::DATE END ) AND (EXTRACT(day FROM date_trunc('week', CURRENT_DATE) - date_trunc('week', ( CASE WHEN re.event_week_day = 'MONDAY' THEN date_trunc('week', CURRENT_DATE)::DATE WHEN re.event_week_day = 'TUESDAY' THEN date_trunc('week', CURRENT_DATE) + interval '1 day'::DATE WHEN re.event_week_day = 'WEDNESDAY' THEN date_trunc('week', CURRENT_DATE) + interval '2 days'::DATE WHEN re.event_week_day = 'THURSDAY' THEN date_trunc('week', CURRENT_DATE) + interval '3 days'::DATE WHEN re.event_week_day = 'FRIDAY' THEN date_trunc('week', CURRENT_DATE) + interval '4 days'::DATE WHEN re.event_week_day = 'SATURDAY' THEN date_trunc('week', CURRENT_DATE) + interval '5 days'::DATE WHEN re.event_week_day = 'SUNDAY' THEN date_trunc('week', CURRENT_DATE) + interval '6 days'::DATE END ))) % (7 * re.repeats_every_n_weeks)) = 0 AND se.student_id = correct_student_id ) AS EventResult SELECT COUNT(CASE WHEN event_type = 'Exam' THEN 1 END) AS exam_count, COUNT(CASE WHEN event_type <> 'Exam' THEN 1 END) AS non_exam_count, COUNT(task.task_id) AS task_count FROM EventResult LEFT JOIN task ON EventResult.event_date = task.task_date; }}} == **[[span(style=color: #BF1B1B, 2. Листање(приказ) на таскови за наредните три дена:)]]** {{{ DECLARE correct_student_id INT; SET correct_student_id = 11111; SELECT t.* FROM task t JOIN dashboard_task dt ON t.task_id = dt.task_id JOIN dashboard d ON dt.student_id = d.student_id JOIN calendar_event ce ON d.dashboard_date = ce.event_start_time::date WHERE d.student_id = chosen_student_id AND ce.event_start_time BETWEEN CURRENT_DATE AND CURRENT_DATE + INTERVAL '3 days'; }}} == **[[span(style=color: #BF1B1B, 3. Листање(приказ) на испити за наредните седум дена:)]]** {{{ SELECT se.*, ce.* FROM subject_event se JOIN calendar_event ce ON se.calendar_event_id = ce.calendar_event_id WHERE ce.event_type = 'Exam' AND ce.event_start_time >= CURRENT_TIMESTAMP AND ce.event_start_time <= CURRENT_TIMESTAMP + INTERVAL '7 days'; }}} == **[[span(style=color: #BF1B1B, 4. Листање(приказ) на сите евенти за одредена недела:)]]** {{{ DECLARE correct_student_id INT; SET correct_student_id = 11111; SELECT * FROM ( SELECT ce.calendar_event_id, ce.event_name, ce.event_type, ce.event_start_time, ce.event_end_time, nre.event_date FROM student_event AS se JOIN calendar_event AS ce ON se.calendar_event_id = ce.calendar_event_id JOIN non_repeating_events AS nre ON ce.calendar_event_id = nre.calendar_event_id WHERE nre.event_date >= date_trunc('week', CURRENT_DATE) AND nre.event_date < date_trunc('week', CURRENT_DATE) + INTERVAL '1 week' AND se.student_id = correct_student_id UNION SELECT ce.calendar_event_id, ce.event_name, ce.event_type, ce.event_start_time, ce.event_end_time, CASE WHEN re.event_week_day = 'MONDAY' THEN date_trunc('week', CURRENT_DATE)::DATE WHEN re.event_week_day = 'TUESDAY' THEN date_trunc('week', CURRENT_DATE) + interval '1 day'::DATE WHEN re.event_week_day = 'WEDNESDAY' THEN date_trunc('week', CURRENT_DATE) + interval '2 days'::DATE WHEN re.event_week_day = 'THURSDAY' THEN date_trunc('week', CURRENT_DATE) + interval '3 days'::DATE WHEN re.event_week_day = 'FRIDAY' THEN date_trunc('week', CURRENT_DATE) + interval '4 days'::DATE WHEN re.event_week_day = 'SATURDAY' THEN date_trunc('week', CURRENT_DATE) + interval '5 days'::DATE WHEN re.event_week_day = 'SUNDAY' THEN date_trunc('week', CURRENT_DATE) + interval '6 days'::DATE END AS event_date FROM student_event AS se JOIN calendar_event AS ce ON se.calendar_event_id = ce.calendar_event_id JOIN repeating_events AS re ON ce.calendar_event_id = re.calendar_event_id WHERE re.starting_date <= ( CASE WHEN re.event_week_day = 'MONDAY' THEN date_trunc('week', CURRENT_DATE)::DATE WHEN re.event_week_day = 'TUESDAY' THEN date_trunc('week', CURRENT_DATE) + interval '1 day'::DATE WHEN re.event_week_day = 'WEDNESDAY' THEN date_trunc('week', CURRENT_DATE) + interval '2 days'::DATE WHEN re.event_week_day = 'THURSDAY' THEN date_trunc('week', CURRENT_DATE) + interval '3 days'::DATE WHEN re.event_week_day = 'FRIDAY' THEN date_trunc('week', CURRENT_DATE) + interval '4 days'::DATE WHEN re.event_week_day = 'SATURDAY' THEN date_trunc('week', CURRENT_DATE) + interval '5 days'::DATE WHEN re.event_week_day = 'SUNDAY' THEN date_trunc('week', CURRENT_DATE) + interval '6 days'::DATE END ) AND re.ending_date >= ( CASE WHEN re.event_week_day = 'MONDAY' THEN date_trunc('week', CURRENT_DATE)::DATE WHEN re.event_week_day = 'TUESDAY' THEN date_trunc('week', CURRENT_DATE) + interval '1 day'::DATE WHEN re.event_week_day = 'WEDNESDAY' THEN date_trunc('week', CURRENT_DATE) + interval '2 days'::DATE WHEN re.event_week_day = 'THURSDAY' THEN date_trunc('week', CURRENT_DATE) + interval '3 days'::DATE WHEN re.event_week_day = 'FRIDAY' THEN date_trunc('week', CURRENT_DATE) + interval '4 days'::DATE WHEN re.event_week_day = 'SATURDAY' THEN date_trunc('week', CURRENT_DATE) + interval '5 days'::DATE WHEN re.event_week_day = 'SUNDAY' THEN date_trunc('week', CURRENT_DATE) + interval '6 days'::DATE END ) AND (EXTRACT(day FROM date_trunc('week', CURRENT_DATE) - date_trunc('week', ( CASE WHEN re.event_week_day = 'MONDAY' THEN date_trunc('week', CURRENT_DATE)::DATE WHEN re.event_week_day = 'TUESDAY' THEN date_trunc('week', CURRENT_DATE) + interval '1 day'::DATE WHEN re.event_week_day = 'WEDNESDAY' THEN date_trunc('week', CURRENT_DATE) + interval '2 days'::DATE WHEN re.event_week_day = 'THURSDAY' THEN date_trunc('week', CURRENT_DATE) + interval '3 days'::DATE WHEN re.event_week_day = 'FRIDAY' THEN date_trunc('week', CURRENT_DATE) + interval '4 days'::DATE WHEN re.event_week_day = 'SATURDAY' THEN date_trunc('week', CURRENT_DATE) + interval '5 days'::DATE WHEN re.event_week_day = 'SUNDAY' THEN date_trunc('week', CURRENT_DATE) + interval '6 days'::DATE END ))) % (7 * re.repeats_every_n_weeks)) = 0 AND se.student_id = correct_student_id ) AS Result ORDER BY event_date, -- Order by day of the week event_start_time; -- Order by time }}} == **[[span(style=color: #BF1B1B, 5. Листање(приказ) на сите евенти за одреден семестар:)]]** {{{ DECLARE correct_student_id INT; SET correct_student_id = 11111; SELECT ce.calendar_event_id, ce.event_name, ce.event_type, ce.event_description, ce.event_start_time, ce.event_end_time FROM calendar_event ce JOIN term t ON ce.starting_year = t.starting_year AND ce.finishing_year = t.finishing_year AND ce.term_type = t.term_type WHERE t.student_id = correct_student_id AND t.starting_year = 2023 AND t.finishing_year = 2024 AND t.term_type = 'Zimski'; }}} == **[[span(style=color: #BF1B1B, 6. Листање(приказ) на сите евенти и task-ови за зададен предмет:)]]** {{{ DECLARE correct_student_id INT; SET correct_student_id = 11111; SELECT ce.calendar_event_id, ce.event_name, ce.event_type, ce.event_description, ce.event_start_time, ce.event_end_time, NULL AS task_id, NULL AS task_name, NULL AS task_description, NULL AS task_priority, NULL AS is_done FROM subject_event se JOIN calendar_event ce ON se.calendar_event_id = ce.calendar_event_id WHERE se.term_subject_id = 170569 UNION SELECT NULL AS calendar_event_id, NULL AS event_name, NULL AS event_type, NULL AS event_description, NULL AS event_start_time, NULL AS event_end_time, t.task_id, t.task_name, t.task_description, t.task_priority, t.is_done FROM creates_task ct JOIN task t ON ct.task_id = t.task_id WHERE ct.term_subject_id = 170569; }}} == **[[span(style=color: #BF1B1B, 7. Листање(приказ) на сите на сите книги и автори по одреден предмет (пример:Бази на податоци):)]]** {{{ DECLARE correct_student_id INT; SET correct_student_id = 11111; WITH SubjectBooks AS ( SELECT rb.book_id, rb.book_title, ba.author_id, a.author_name FROM recommended_book AS rb JOIN book_author AS ba ON rb.book_id = ba.book_id WHERE rb.subject_name = 'Bazi na podatoci' AND rb.student_id = correct_student_id ) SELECT sb.book_id, sb.book_title, sb.author_id, sb.author_name FROM SubjectBooks AS sb; }}} == **[[span(style=color: #BF1B1B, 8. Приказна на сите feedbacks (описи и наслови на feedback) со оценка помала од 3:)]]** {{{ DECLARE correct_student_id INT; SET correct_student_id = 11111; SELECT fb.fb_id, fb.fb_date, fb.fb_title, fb.fb_description, fb.fb_rating FROM feedback AS fb WHERE fb.fb_rating < 3 AND EXISTS ( SELECT 1 FROM gives_feedback AS gf WHERE gf.fb_id = fb.fb_id AND gf.student_id = correct_student_id ); }}}