Knowledge Guide
HomeDatabasesSQL Practice Problems

medium Same-Day Appointment Fulfillment

Problem Statement

Table: Appointments
This table holds information about medical appointments for patients. Each appointment includes an appointment ID, patient ID, the date the appointment was made, and the preferred appointment date specified by the patient.

+------------------------+---------+
| Column Name            | Type    |
+------------------------+---------+
| appointment_id         | int     |
| patient_id             | int     |
| booking_date           | date    |
| patient_pref_date      | date    |
+------------------------+---------+
appointment_id is the column of unique values for this table.

An appointment is considered immediate if the patient's preferred appointment date is the same as the booking date; otherwise, it is considered scheduled.

The first appointment of a patient is defined as the appointment with the earliest booking date made by that patient. It is assured that each patient has exactly one first appointment.

Develop a solution to find the percentage of immediate appointments among the first appointments of all patients, rounded to 2 decimal places.

Return the result in the format illustrated in the following example.

Example

Input:

Appointments table: +----------------+------------+-------------+------------------+ | appointment_id | patient_id | booking_date | patient_pref_date| +----------------+------------+-------------+------------------+ | 10 | 20 | 2020-07-01 | 2020-07-02 | | 11 | 30 | 2020-07-02 | 2020-07-02 | | 12 | 20 | 2020-07-15 | 2020-07-16 | | 13 | 40 | 2020-07-22 | 2020-07-22 | | 14 | 40 | 2020-07-18 | 2020-07-19 | | 15 | 30 | 2020-07-20 | 2020-07-22 | | 16 | 50 | 2020-07-25 | 2020-07-25 | +----------------+------------+-------------+------------------+

Output:

+----------------------+ | immediate_percentage | +----------------------+ | 50.00 | +----------------------+

Here, the first appointments of the patients having patient_id 30 and 50 have immediate appointments.

Try It Yourself

java
-- TODO: Write your user queries here

Solution

To determine the percentage of immediate appointments among the first appointments of all patients, we need to systematically identify each patient's earliest appointment and check if it was scheduled immediately. An appointment is considered immediate if the patient's preferred appointment date matches the booking date.

SQL Query

WITH FirstAppointments AS ( SELECT patient_id, MIN(booking_date) AS first_booking_date FROM Appointments GROUP BY patient_id ) SELECT ROUND( (SELECT COUNT(*) FROM FirstAppointments fa JOIN Appointments a ON fa.patient_id = a.patient_id AND fa.first_booking_date = a.booking_date WHERE a.booking_date = a.patient_pref_date) / (SELECT COUNT(*) FROM FirstAppointments) * 100, 2) AS immediate_percentage

Step-by-Step Approach

Step 1: Identify First Appointments

Determine the earliest booking date for each patient to identify their first appointment.

SQL Query:

WITH FirstAppointments AS ( SELECT patient_id, MIN(booking_date) AS first_booking_date FROM Appointments GROUP BY patient_id )

Explanation:

Output After Step 1:

Assuming the example input, the FirstAppointments CTE would produce:

+------------+---------------------+ | patient_id | first_booking_date | +------------+---------------------+ | 20 | 2020-07-01 | | 30 | 2020-07-02 | | 40 | 2020-07-18 | | 50 | 2020-07-25 | +------------+---------------------+

Step 2: Determine Immediate Appointments

Identify which of the first appointments are immediate by checking if the booking date matches the patient's preferred appointment date.

SQL Query:

SELECT COUNT(*) FROM FirstAppointments fa JOIN Appointments a ON fa.patient_id = a.patient_id AND fa.first_booking_date = a.booking_date WHERE a.booking_date = a.patient_pref_date

Explanation:

Output After Step 2:

Based on the example input, the query would return:

+----------+ | COUNT(*) | +----------+ | 2 | +----------+

Step 3: Calculate Total Number of First Appointments

Determine the total number of first appointments across all patients to serve as the denominator for the percentage calculation.

SQL Query:

SELECT COUNT(*) FROM FirstAppointments

Explanation:

Output After Step 3:

Based on the example input, the query would return:

+----------+ | COUNT(*) | +----------+ | 4 | +----------+

Step 4: Calculate and Select the Immediate Percentage

Compute the percentage of immediate first appointments by dividing the number of immediate appointments by the total number of first appointments and rounding the result to two decimal places.

SQL Query:

SELECT ROUND( (SELECT COUNT(*) FROM FirstAppointments fa JOIN Appointments a ON fa.patient_id = a.patient_id AND fa.first_booking_date = a.booking_date WHERE a.booking_date = a.patient_pref_date) / (SELECT COUNT(*) FROM FirstAppointments) * 100, 2) AS immediate_percentage

Explanation:

Final Output:

+----------------------+ | immediate_percentage | +----------------------+ | 50.00 | +----------------------+
🤖 Don't fully get this? Learn it with Claude

Stuck on Same-Day Appointment Fulfillment? Open Claude, copy a block below, and it'll teach you this exact concept — visually and interactively.

🪜 Hint ladder (no spoilers)

Progressively stronger hints — you still solve it.

I'm working on the problem **Same-Day Appointment Fulfillment** (Databases). Give me a HINT LADDER: start with the tiniest nudge, then wait. Only reveal the next, stronger hint when I ask. Do NOT show the full solution unless I type 'show solution'. Keep me doing the thinking. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🎨 Explain the approach visually

See the technique, not just code.

Explain the optimal approach to **Same-Day Appointment Fulfillment** with a VISUAL walkthrough: trace it on a small concrete example using ASCII art / a step-by-step diagram, narrate what changes each step, then give time & space complexity with a one-line derivation. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🔍 Review my solution

Catch bugs, edge cases, sub-optimality.

I'll paste my solution to **Same-Day Appointment Fulfillment**. Review it for correctness, missed edge cases, and time/space complexity, then coach me toward the optimal — don't just rewrite it. Ask me to paste my code now. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🔁 Drill the pattern

Lock in recognition with look-alikes.

Give me 2 problems that use the SAME underlying pattern as **Same-Day Appointment Fulfillment**. For each, let me attempt first, then review my answer and name the trigger signal that reveals the pattern. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.

📝 My notes