Introduction to Data Modeling in Snowflake
Nuno Rocha
Director of Engineering











SELECT *
FROM guests
WHERE id IN (SELECT guest_id 
                  FROM loyalty_program 
                  WHERE loyalty_points > 1000);

WITH latest_booking AS (
    SELECT guest_id, 
           MAX(checkout_date) AS latest_checkout
    FROM booking_details
    GROUP BY guest_id
)
SELECT bd.*, 
       bd.checkout_date AS latest_booking_date
FROM booking_details bd
    JOIN latest_booking lb 
        ON bd.guest_id = lb.guest_id 
        AND bd.checkout_date = lb.latest_checkout;
Pros
Cons
Pros
Cons

WITH .. AS: SQL command to define a CTELIMIT: SQL clause constraining the number of rows in query resultsHAVING: SQL clause used to filter data that aggregated with functions like SUM, MAX, etcWHERE: SQL clause used to filter rows before grouping, enhancing query efficiencySELECT *
FROM table_name
WHERE column_name IN (SELECT column_name 
                  FROM table_name
                  WHERE column_name condition value);
WITH latest_booking_dates AS (
    SELECT column_name
    FROM table_name)
SELECT *
FROM table_name a
    JOIN other_table_name b 
    ON a.key_column = b.key_column;
Introduction to Data Modeling in Snowflake