Advent of SQL
  • 2024
  • 2025
  • About

2025

Day 10

Day 10

SELECT
    TRIM(LOWER(raw_wish)) AS wish,
    COUNT(*) AS count
FROM wish_list
GROUP BY wish
ORDER BY count DESC
LIMIT 20;
                          wish count
1             lego city f1 car 32893
2            barbie dreamhouse 32785
3                 nerf blaster 32746
4           lego star wars set 32611
5        beyblade battle arena 29564
6    magna-tiles pet playhouse 29529
7   bluey supermarket play set 26292
8  lego friends amusement park 25982
9          pokemon trainer box 25968
10          duplo building set 23005
11 mini brands fill the fridge 22965
12      electric toy train set 22885
13       toniebox audio player 19529
14                     scooter 19496
15                  vr headset 16468
16               squishmallows 16304
17          shaved ice machine 16263
18              drone for kids 13151
19                coding robot 13025
20                  headphones 13006
0.144 sec elapsed

Day 11

Day 11

SELECT
    cat.official_category,
    SUM(inv.quantity) AS total_usable_snowballs
FROM snowball_categories AS cat
LEFT JOIN snowball_inventory AS inv
    ON
        cat.official_category = inv.category_name
        AND inv.quantity >= 0
GROUP BY cat.official_category
ORDER BY total_usable_snowballs ASC;
          official_category total_usable_snowballs
1      arctic blast premium                  19335
2  everfrost training round                  39612
3 polar precision microball                 117912
4       glacier sphere (xl)                 275503
5       north ridge compact                 991208
6       frost-flight deluxe                1586029
0.117 sec elapsed

Day 12

Day 12

UPDATE hotline_messages
SET status = 'approved'
WHERE
    1 = 1
    AND LOWER(transcript) LIKE '%sorry%'
    AND status IS NULL;

DELETE FROM hotline_messages
WHERE
    1 = 1
    AND tag IN (
        'penguin prank',
        'time-loop advisory',
        'possible dragon',
        'nonsense alert'
    )
    OR LOWER(caller_name) = 'test caller';

SELECT
    COALESCE(status, 'needs review') AS imputed_status,
    COUNT(*) AS n_messages
FROM hotline_messages
GROUP BY imputed_status;
UPDATE successfully executed. 68 rows were affected.


DELETE successfully executed. 89 rows were affected.


  imputed_status n_messages
1   needs review        501
2       approved        477
0.014 sec elapsed

Day 13

Day 13

WITH os AS (
    SELECT
        volunteer_name,
        role AS assigned_role,
        CASE
            WHEN shift_time LIKE '%10%' THEN '10:00'
            WHEN shift_time LIKE '%12%' THEN '12:00'
            WHEN shift_time LIKE '%2%' THEN '14:00'
        END AS shift_time
    FROM official_shifts
),

lms AS (
    SELECT
        volunteer_name,
        CASE
            WHEN LOWER(assigned_task) LIKE '%stage%' THEN 'stage_setup'
            WHEN LOWER(assigned_task) LIKE '%cocoa%' THEN 'cocoa_station'
            WHEN LOWER(assigned_task) LIKE '%parking%' THEN 'parking_support'
            WHEN LOWER(assigned_task) LIKE '%choir%' THEN 'choir_assistant'
            WHEN
                LOWER(assigned_task) LIKE '%handwarmer%'
                THEN 'handwarmer_handout'
            WHEN LOWER(assigned_task) LIKE '%snow%' THEN 'snow_shoveling'
            WHEN LOWER(assigned_task) LIKE '%shovel%' THEN 'snow_shoveling'
        END AS assigned_task_clean,
        CASE
            WHEN LOWER(time_slot) LIKE '%noon%' THEN '12:00'
            WHEN time_slot LIKE '%10%' THEN '10:00'
            WHEN time_slot LIKE '%2%' THEN '14:00'
        END AS time_slot_clean
    FROM last_minute_signups
),

merged_table AS (
    SELECT
        COALESCE(lms.volunteer_name, os.volunteer_name) AS volunteer_name,
        COALESCE(lms.assigned_task_clean, os.assigned_role) AS assigned_role,
        COALESCE(lms.time_slot_clean, os.shift_time) AS shift_time
    FROM lms
    FULL OUTER JOIN os ON lms.volunteer_name = os.volunteer_name
)

SELECT DISTINCT
    volunteer_name,
    assigned_role,
    shift_time
FROM merged_table
ORDER BY volunteer_name ASC
LIMIT 15;
      volunteer_name      assigned_role shift_time
1       Aaron Carter    parking_support      14:00
2         Aaron Diaz    choir_assistant      14:00
3        Aaron Evans      cocoa_station      14:00
4      Aaron Francis handwarmer_handout      14:00
5  Abigail Hernandez        stage_setup      10:00
6          Adam King        stage_setup      10:00
7        Adil Foster        stage_setup      14:00
8        Adil Rahman        stage_setup      14:00
9         Adrian Cox      cocoa_station      10:00
10     Aisha Bennett      cocoa_station      12:00
11        Aisha Khan    choir_assistant      12:00
12    Aisha Mohammed      cocoa_station      14:00
13       Alina Popov      cocoa_station      12:00
14      Alina Powell    parking_support      12:00
15      Amina Diallo    parking_support      14:00
0.002 sec elapsed

Day 14

Day 14

WITH total_counts AS (
    SELECT
        user_name,
        artist,
        COUNT(artist) AS count
    FROM listening_logs
    WHERE played_at > '2025-01-01'
    GROUP BY user_name, artist
)

SELECT
    user_name,
    artist,
    count
FROM
    (
        SELECT
            *,
            ROW_NUMBER() OVER (PARTITION BY
                user_name
            ORDER BY count DESC) AS user_count
        FROM total_counts
    ) AS tc
WHERE user_count < 4
ORDER BY user_name ASC, count DESC
LIMIT 24;
           user_name                       artist count
1  Abigail Hernandez                   Ed Sheeran    78
2  Abigail Hernandez                 Rotten Mango    15
3  Abigail Hernandez                Billie Eilish     4
4         Adrian Cox               Kendrick Lamar   128
5         Adrian Cox        Stuff You Should Know    30
6         Adrian Cox                   Pentatonix     6
7        Alex Rivera                   Ed Sheeran   274
8        Alex Rivera Call Her Daddy (Alex Cooper)    42
9        Alex Rivera                    Green Day    11
10    Anders Nilsson                  Snow Patrol   101
11    Anders Nilsson                    SmartLess    29
12    Anders Nilsson                    Blink-182     5
13      Anthony King                   Pentatonix   114
14      Anthony King      The Tucker Carlson Show    14
15      Anthony King                  The Beatles     5
16       Anya Pavlov                     Coldplay   135
17       Anya Pavlov   Just Creepy: Scary Stories    19
18       Anya Pavlov                Ariana Grande     5
19       Ava Morales            Angels & Airwaves    90
20       Ava Morales   Just Creepy: Scary Stories    23
21       Ava Morales                 Foo Fighters     5
22    Benjamin Davis                     Coldplay    93
23    Benjamin Davis                Billie Eilish     6
24    Benjamin Davis             Mostly Technical     6
0.009 sec elapsed

Day 15

Day 15

WITH dates AS (
    SELECT DISTINCT gift_date AS delivery_date
    FROM deliveries_assigned
    WHERE gift_date > '2025-12-14'
    ORDER BY delivery_date
),

expected_delivery_dates AS (
    SELECT
        fam.id AS family_id,
        fam.family_name,
        dt.delivery_date
    FROM families AS fam
    CROSS JOIN dates AS dt
)

SELECT
    edd.delivery_date AS unassigned_date,
    edd.family_name
FROM expected_delivery_dates AS edd
LEFT JOIN deliveries_assigned AS del
    ON
        edd.delivery_date = del.gift_date
        AND edd.family_id = del.family_id
WHERE del.id IS NULL
GROUP BY unassigned_date, edd.family_name
ORDER BY unassigned_date ASC, edd.family_name ASC
LIMIT 25;
   unassigned_date     family_name
1       2025-12-15      Adil Rossi
2       2025-12-15    Aisha Connor
3       2025-12-15     Amina Perez
4       2025-12-15      Amina Wong
5       2025-12-15    Andre Flores
6       2025-12-15      Anya Singh
7       2025-12-15      Arjun Wong
8       2025-12-15   Bianca Connor
9       2025-12-15    Caleb Petrov
10      2025-12-15   Caleb Roberts
11      2025-12-15   Carmen Carter
12      2025-12-15   Carmen Garcia
13      2025-12-15    Casey Flores
14      2025-12-15      Chi Hughes
15      2025-12-15   Clara Johnson
16      2025-12-15   Dara Bautista
17      2025-12-15   David Ramirez
18      2025-12-15    Elias Petrov
19      2025-12-15    Ethan Flores
20      2025-12-15    Eva Gonzalez
21      2025-12-15      Eva Turner
22      2025-12-15     Haruto Diaz
23      2025-12-15      Hugo Perez
24      2025-12-15       Hugo Wong
25      2025-12-15 Isaac Andersson
0.006 sec elapsed

Day 16

Day 16

WITH available_cars AS (
    SELECT
        car_id,
        available_mixins
    FROM cocoa_cars
    ORDER BY total_stock DESC
    LIMIT 3
),

available_mixins AS (
    SELECT
        car_id,
        UNNEST(available_mixins) AS available_mixins
    FROM available_cars
),

passengers_mixins AS (
    SELECT
        passenger_name,
        UNNEST(favorite_mixins) AS favorite_mixins
    FROM passengers
)

SELECT
    pm.passenger_name,
    ARRAY_AGG(DISTINCT am.car_id) AS cars_available
FROM passengers_mixins AS pm
INNER JOIN available_mixins AS am
    ON pm.favorite_mixins = am.available_mixins
GROUP BY pm.passenger_name
ORDER BY pm.passenger_name ASC
LIMIT 25;
         passenger_name cars_available
1        Aaron Ashcroft            {2}
2   Abigail Worthington          {2,9}
3       Aiden Stanfield            {9}
4    Alexander Stratton          {5,9}
5      Alexis Thorndale            {9}
6    Alice Merriweather        {2,5,9}
7        Amanda Fitzroy        {2,5,9}
8       Amelia Rosewood            {9}
9        Anna Westfield            {2}
10       Aria Blackwood        {2,5,9}
11     Ashley Fairhaven        {2,5,9}
12     August Blackwell        {2,5,9}
13     Aurora Whitfield        {2,5,9}
14 Benjamin Fairweather            {9}
15       Benjamin Patel            {9}
16       Bianca Pereira            {9}
17        Blake Dunwood          {5,9}
18     Brandon Locklear        {2,5,9}
19           Caleb Osei          {5,9}
20    Cameron Gladstone          {2,9}
21       Cameron Rogers        {2,5,9}
22        Carlos Mendez          {5,9}
23   Caroline Bannister          {2,9}
24    Carter Brookfield            {2}
25      Charlotte Singh        {2,5,9}
0.003 sec elapsed

Day 17

Day 17

WITH last_score AS (
    SELECT MAX(id) AS last_id
    FROM price_changes
    GROUP BY product_id
),

price_calculations AS (
    SELECT
        pid.id,
        pd.product_name,
        pid.price AS current_price,
        LAG(pid.price)
            OVER (
                PARTITION BY pd.product_name
                ORDER BY pid.effective_timestamp ASC
            )
            AS previous_price
    FROM price_changes AS pid
    INNER JOIN products AS pd
        ON pid.product_id = pd.product_id
)

SELECT
    product_name,
    current_price,
    previous_price,
    current_price - previous_price AS price_diff
FROM price_calculations
WHERE
    id IN (SELECT ls.last_id FROM last_score AS ls)
ORDER BY product_name ASC
LIMIT 25;
                      product_name current_price previous_price price_diff
1                   Classic Candle         49.55          57.05      -7.50
2    Classic Cookie Decorating Kit        243.09         214.65      28.44
3             Classic Cookware Set         66.24          79.06     -12.82
4            Classic Festive Scarf         67.10          61.20       5.90
5         Classic Holiday Jam Trio         15.99          18.89      -2.90
6                      Classic Mug        173.05         157.02      16.03
7                  Classic Notepad        120.49         122.23      -1.74
8                 Classic Ornament         35.05          30.25       4.80
9      Classic Pecan Praline Bites         45.42          41.74       3.68
10         Classic Roasted Cashews        257.33         223.63      33.70
11                    Classic Sled        193.40         166.11      27.29
12 Classic White Chocolate Popcorn         40.38          47.51      -7.13
13             Cozy Almond Brittle        107.21         116.42      -9.21
14                 Cozy Board Game         39.20          45.96      -6.76
15                     Cozy Candle        105.68          91.49      14.19
16               Cozy Cookware Set        106.87          89.35      17.52
17           Cozy Fruit Assortment         30.08          25.79       4.29
18                       Cozy Lamp        138.36         170.15     -31.79
19                    Cozy Notepad        102.78         106.04      -3.26
20        Cozy Pecan Praline Bites         22.24          18.69       3.55
21                     Cozy Puzzle        209.20         227.24     -18.04
22          Cozy Reindeer Headband        215.40         196.31      19.09
23        Cozy Scented Pine Sachet        152.76         159.88      -7.12
24             Cozy Trail Mix Trio        107.81         101.09       6.72
25    Cozy White Chocolate Popcorn         74.78          71.58       3.20
0.006 sec elapsed

Day 18

Day 18

WITH latest_order AS (
    SELECT
        customer_id,
        MAX(created_at) AS latest_date
    FROM orders
    GROUP BY customer_id
)

SELECT
    ord.customer_id,
    ((ord.order_data::json ->> 'gift')::json ->> 'wrapped')::boolean
        AS gift_wrap,
    (ord.order_data::json ->> 'shipping')::json ->> 'method' AS shipping_method,
    (ord.order_data::json ->> 'risk')::json ->> 'flag' AS risk
FROM orders AS ord
INNER JOIN
    latest_order AS lo
    ON
        ord.customer_id = lo.customer_id
        AND ord.created_at = lo.latest_date
   customer_id gift_wrap shipping_method   risk
1            1     FALSE         express   <NA>
2            2     FALSE        standard   <NA>
3            3      TRUE        standard   high
4            4     FALSE         express   <NA>
5            5      TRUE       overnight   <NA>
6            6      TRUE       overnight   <NA>
7            7     FALSE         express   <NA>
8            8     FALSE       overnight   <NA>
9            9      TRUE         express   <NA>
10          10     FALSE        standard medium
11          11      TRUE        standard medium
12          12      TRUE        standard medium
13          13      TRUE        standard   <NA>
14          14      TRUE        standard   <NA>
15          15     FALSE         express medium
16          16     FALSE         express   <NA>
17          17     FALSE        standard   <NA>
18          18     FALSE       overnight    low
19          19     FALSE        standard   <NA>
20          20     FALSE       overnight   <NA>
21          21      TRUE       overnight   <NA>
22          22     FALSE        standard medium
23          23     FALSE         express   <NA>
24          24     FALSE       overnight   <NA>
25          25      TRUE       overnight   high
26          26     FALSE        standard    low
27          27      TRUE        standard   <NA>
28          28     FALSE        standard    low
29          29      TRUE       overnight   high
30          30     FALSE       overnight medium
31          31     FALSE         express   <NA>
32          32     FALSE       overnight   <NA>
33          33      TRUE         express   <NA>
34          34     FALSE         express   <NA>
35          35      TRUE         express   high
36          36      TRUE       overnight   <NA>
37          37      TRUE       overnight   <NA>
38          38      TRUE        standard   <NA>
39          39      TRUE       overnight   <NA>
40          40     FALSE         express   <NA>
41          41     FALSE        standard   high
42          42     FALSE       overnight medium
43          43      TRUE         express   <NA>
44          44      TRUE        standard   <NA>
45          45     FALSE        standard   <NA>
46          46     FALSE        standard   <NA>
47          47     FALSE        standard   <NA>
48          48      TRUE        standard   <NA>
49          49      TRUE         express   high
50          50      TRUE         express    low
0.003 sec elapsed

Day 19

Day 19

INSERT INTO misdelivered_presents
SELECT
    id,
    child_name,
    delivery_location,
    gift_name,
    scheduled_at,
    DATE_TRUNC('minute', NOW()) AS flagged_at,
    'Invalid delivery location' AS reason
FROM deliveries
WHERE
    delivery_location IN (
        'Volcano Rim', 'Drifting Igloo', 'Abandoned Lighthouse', 'The Vibes'
    );

SELECT
    id,
    child_name,
    delivery_location,
    gift_name,
    scheduled_at,
    flagged_at,
    reason
FROM misdelivered_presents
WHERE flagged_at = DATE_TRUNC('minute', NOW())
ORDER BY id
LIMIT 25;
INSERT successfully executed. 103 rows were affected.

    id child_name    delivery_location            gift_name        scheduled_at
1    3    Mila N.            The Vibes storybook collection 2025-12-24 21:09:00
2   22    Lena F. Abandoned Lighthouse       plush reindeer 2025-12-24 19:08:00
3   23    Mila N. Abandoned Lighthouse storybook collection 2025-12-24 20:42:00
4   29   Mateo C.          Volcano Rim       plush reindeer 2025-12-24 21:44:00
5   31     Nia G.       Drifting Igloo            robot toy 2025-12-24 19:57:00
6   38    Omar Q.            The Vibes          science kit 2025-12-24 19:48:00
7   41    Hiro T.            The Vibes     wooden train set 2025-12-24 21:04:00
8   47    Omar Q.          Volcano Rim         art supplies 2025-12-24 20:09:00
9   53     Ava J.          Volcano Rim       plush reindeer 2025-12-24 18:20:00
10  59   Sofia K. Abandoned Lighthouse            robot toy 2025-12-24 20:46:00
11  62    Lena F.       Drifting Igloo     wooden train set 2025-12-24 20:21:00
12  68    Mila N.          Volcano Rim           teddy bear 2025-12-24 20:01:00
13  70   Mateo C. Abandoned Lighthouse storybook collection 2025-12-24 19:50:00
14  72    Zara S.            The Vibes     wooden train set 2025-12-24 20:47:00
15  85    Mila N. Abandoned Lighthouse           board game 2025-12-24 21:03:00
16  87   Jonah W.       Drifting Igloo     wooden train set 2025-12-24 21:08:00
17  92   Layla B.            The Vibes storybook collection 2025-12-24 21:40:00
18  94   Layla B.       Drifting Igloo       plush reindeer 2025-12-24 20:32:00
19  96    Omar Q.          Volcano Rim           teddy bear 2025-12-24 20:13:00
20  99    Ravi P. Abandoned Lighthouse          science kit 2025-12-24 20:45:00
21 111   Sofia K. Abandoned Lighthouse         art supplies 2025-12-24 18:53:00
22 116    Lena F.          Volcano Rim          science kit 2025-12-24 19:07:00
23 120    Zara S.       Drifting Igloo           puzzle box 2025-12-24 20:21:00
24 123    Lena F.            The Vibes       plush reindeer 2025-12-24 19:03:00
25 125    Hiro T.            The Vibes            robot toy 2025-12-24 21:11:00
            flagged_at                    reason
1  2026-01-02 13:04:00 Invalid delivery location
2  2026-01-02 13:04:00 Invalid delivery location
3  2026-01-02 13:04:00 Invalid delivery location
4  2026-01-02 13:04:00 Invalid delivery location
5  2026-01-02 13:04:00 Invalid delivery location
6  2026-01-02 13:04:00 Invalid delivery location
7  2026-01-02 13:04:00 Invalid delivery location
8  2026-01-02 13:04:00 Invalid delivery location
9  2026-01-02 13:04:00 Invalid delivery location
10 2026-01-02 13:04:00 Invalid delivery location
11 2026-01-02 13:04:00 Invalid delivery location
12 2026-01-02 13:04:00 Invalid delivery location
13 2026-01-02 13:04:00 Invalid delivery location
14 2026-01-02 13:04:00 Invalid delivery location
15 2026-01-02 13:04:00 Invalid delivery location
16 2026-01-02 13:04:00 Invalid delivery location
17 2026-01-02 13:04:00 Invalid delivery location
18 2026-01-02 13:04:00 Invalid delivery location
19 2026-01-02 13:04:00 Invalid delivery location
20 2026-01-02 13:04:00 Invalid delivery location
21 2026-01-02 13:04:00 Invalid delivery location
22 2026-01-02 13:04:00 Invalid delivery location
23 2026-01-02 13:04:00 Invalid delivery location
24 2026-01-02 13:04:00 Invalid delivery location
25 2026-01-02 13:04:00 Invalid delivery location
0.008 sec elapsed

Day 20

Day 20

WITH roll_avg AS (
    SELECT
        child_id,
        child_name,
        behavior_date,
        AVG(score) OVER (
            PARTITION BY child_id
            ORDER BY
                child_id,
                behavior_date
            ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
        ) AS rolling_avg_score
    FROM behavior_logs
)

SELECT
    child_id,
    child_name,
    behavior_date,
    rolling_avg_score
FROM roll_avg
WHERE
    1 = 1
    AND behavior_date >= '2025-12-07' AND rolling_avg_score < 0
ORDER BY behavior_date, child_name
LIMIT 25;
   child_id child_name behavior_date rolling_avg_score
1        99     Ava X.    2025-12-07        -0.1428571
2         5   Ethan D.    2025-12-07        -0.8571429
3        27   Jonah L.    2025-12-07        -0.2857143
4        49    Liam I.    2025-12-07        -0.1428571
5       117   Mateo H.    2025-12-07        -0.5714286
6        79     Nia E.    2025-12-07        -0.2857143
7         7   Nolan R.    2025-12-07        -1.1428571
8        25    Omar D.    2025-12-07        -0.7142857
9        65   Priya G.    2025-12-07        -0.5714286
10       99     Ava X.    2025-12-08        -0.2857143
11        5   Ethan D.    2025-12-08        -1.2857143
12      114   Jonah L.    2025-12-08        -0.4285714
13       27   Jonah L.    2025-12-08        -0.5714286
14       49    Liam I.    2025-12-08        -0.5714286
15       80   Lucas P.    2025-12-08        -0.4285714
16      117   Mateo H.    2025-12-08        -0.7142857
17       79     Nia E.    2025-12-08        -1.0000000
18        7   Nolan R.    2025-12-08        -0.8571429
19      100   Nolan X.    2025-12-08        -0.4285714
20       25    Omar D.    2025-12-08        -0.8571429
21       65   Priya G.    2025-12-08        -0.7142857
22        5   Ethan D.    2025-12-09        -1.1428571
23      114   Jonah L.    2025-12-09        -0.7142857
24       97   Layla N.    2025-12-09        -0.5714286
25       49    Liam I.    2025-12-09        -0.5714286
0.005 sec elapsed

Day 21

Day 21

This isn’t entirely what he wanted, but this one at least has some practical usecase for me personally.

WITH scored AS (
    SELECT
        id,
        title,
        description,
        CASE
            WHEN
                (LOWER(title) LIKE '%flight%' OR LOWER(title) LIKE '%fly%')
                AND (
                    LOWER(description) LIKE '%flight%'
                    OR LOWER(description) LIKE '%fly%'
                )
                THEN 2
            WHEN
                (LOWER(title) LIKE '%flight%' OR LOWER(title) LIKE '%fly%')
                OR (
                    LOWER(description) LIKE '%flight%'
                    OR LOWER(description) LIKE '%fly%'
                )
                THEN 1
            ELSE 0
        END AS score
    FROM archive_records
)

SELECT
    id,
    title,
    description,
    score
FROM scored
WHERE score > 0
ORDER BY score DESC
LIMIT 5;
   id                                       title
1 393            Elven Flight Proficiency Program
2 187 Flight Stabilization Mechanism Enhancements
3  63 Memorandum: Flight Stabilization Techniques
4  10               Sleigh Skim Mechanism Upgrade
5  33      Reindeer Workload Assessment Checklist
                                                                                                                                                                                                                                                                                                    description
1                        This comprehensive training module equips elves with advanced airborne maneuvering skills essential for diurnal navigation. Emphasizing agility and precision, trainees will engage in simulated flight drills using enchanted winged harnesses to ensure they master aerial dynamics.
2                                             Through careful recalibration of the guidance fins, we have achieved unprecedented stability during aerial maneuvers. Preliminary tests indicate a 30% reduction in turbulence susceptibility, paving the way for smoother flights across unpredictable terrains.
3 In our quest to enhance airborne toy functionality, we have devised a set of stabilization methods to mitigate erratic flight patterns. Through meticulous experimentation with weight distribution and magical energy fluctuations, we aim to achieve unprecedented aerial balance in our sleigh prototypes.
4                                                        The experiment involved enchanting the underside of the sleigh with a whispering wind charm to achieve unprecedented speeds. Results were alarming, leading to uncontrollable flight trajectories and sudden descents—definitely do not attempt again.
5                                                                                                                       Ensure all reindeer are properly rested before the study begins. Maintain a balance between flying practice and nutrition to prevent overwhelm and ensure optimal performance outcomes.
  score
1     2
2     2
3     2
4     1
5     1
0.007 sec elapsed

Day 22

Day 22

SELECT
    vehicle_id,
    departure_time,
    SUM(ARRAY_LENGTH(XPATH('//passenger/name/text()', manifest_xml), 1)) AS n_passengers --noqa: LT05
FROM travel_manifests
WHERE UPPER(vehicle_id) LIKE 'CARGO%'
GROUP BY vehicle_id, departure_time
HAVING SUM(ARRAY_LENGTH(XPATH('//passenger/name/text()', manifest_xml), 1)) > 20
ORDER BY departure_time;
  vehicle_id      departure_time n_passengers
1   CARGO-12 2025-12-22 18:00:00           28
2   CARGO-12 2025-12-22 23:00:00           24
3   CARGO-12 2025-12-23 04:00:00           38
4   CARGO-12 2025-12-23 07:00:00           21
5   CARGO-12 2025-12-23 22:00:00           21
0.006 sec elapsed

Day 23

Day 23

Nope, not even going to try this one.

Day 24

Day 24

WITH dispatches AS (
    SELECT
        marker_letter,
        ROW_NUMBER()
            OVER (PARTITION BY system_id ORDER BY dispatched_at DESC)
            AS row_num
    FROM system_dispatches
    WHERE payload ->> 'source' = 'primary'
)

SELECT STRING_AGG(marker_letter, '') AS confirmation_phrase
FROM dispatches
WHERE row_num = 1;
  confirmation_phrase
1         AYVENTOFSQJ
0.002 sec elapsed

I suppose the answer was supposed to be 'ADVENTOFSQL', but there wasn’t a row labeled 'primary_source' in the input file I downloaded with the letter ‘D’, so I think it’s a data issue. I got the same result when I tried the online playground thing.

Last challenge, was a nice Advent of SQL this year! 👏🏻 Lot of work went into this once again.