mirror of https://github.com/me50/kukemuna.git
296 lines
8.9 KiB
SQL
296 lines
8.9 KiB
SQL
-- Keep a log of any SQL queries you execute as you solve the mystery.
|
||
|
||
-- Get overview of available data (tables)
|
||
.tables
|
||
|
||
-- airports crime_scene_reports people
|
||
-- atm_transactions flights phone_calls
|
||
-- bakery_security_logs interviews
|
||
-- bank_accounts passengers
|
||
|
||
|
||
-- Get structure of crime_scene_reports
|
||
.schema crime_scene_reports
|
||
|
||
-- id INTEGER,
|
||
-- year INTEGER,
|
||
-- month INTEGER,
|
||
-- day INTEGER,
|
||
-- street TEXT,
|
||
-- description TEXT,
|
||
-- PRIMARY KEY(id)
|
||
|
||
-- All you know is that the theft took place on July 28, 2023 and that it took place on Humphrey Street.
|
||
SELECT description FROM crime_scene_reports
|
||
WHERE year = 2023 AND month = 7 AND day = 28
|
||
AND street = 'Humphrey Street';
|
||
|
||
-- Theft of the CS50 duck took place at 10:15am at the Humphrey Street bakery. Interviews were conducted today with three witnesses who were present at the time –
|
||
-- each of their interview transcripts mentions the bakery.
|
||
|
||
-- Littering took place at 16:36. No known witnesses.
|
||
|
||
|
||
-- Get structure of interviews
|
||
.schema interviews
|
||
|
||
-- id INTEGER,
|
||
-- name TEXT,
|
||
-- year INTEGER,
|
||
-- month INTEGER,
|
||
-- day INTEGER,
|
||
-- transcript TEXT,
|
||
-- PRIMARY KEY(id)
|
||
|
||
|
||
-- Get transcripts from the same day with mentions to bakery
|
||
SELECT transcript FROM interviews
|
||
WHERE year = 2023 AND month = 7 AND day = 28
|
||
AND transcript LIKE '%bakery%';
|
||
|
||
-- Sometime within ten minutes of the theft, I saw the thief get into a car in the bakery parking lot and drive away. If you have security footage from the bakery parking lot,
|
||
-- you might want to look for cars that left the parking lot in that time frame.
|
||
|
||
-- I don't know the thief's name, but it was someone I recognized. Earlier this morning, before I arrived at Emma's bakery, I was walking by the ATM on Leggett Street
|
||
-- and saw the thief there withdrawing some money.
|
||
|
||
-- As the thief was leaving the bakery, they called someone who talked to them for less than a minute. In the call, I heard the thief say that they were planning to take
|
||
-- the earliest flight out of Fiftyville tomorrow. The thief then asked the person on the other end of the phone to purchase the flight ticket.
|
||
|
||
|
||
-- Get structure of bakery_security_logs
|
||
.schema bakery_security_logs
|
||
|
||
-- id INTEGER,
|
||
-- year INTEGER,
|
||
-- month INTEGER,
|
||
-- day INTEGER,
|
||
-- hour INTEGER,
|
||
-- minute INTEGER,
|
||
-- activity TEXT,
|
||
-- license_plate TEXT,
|
||
-- PRIMARY KEY(id)
|
||
|
||
-- Get licence plates of leaving customers from within 10 minutes of theft (10:15am)
|
||
SELECT license_plate FROM bakery_security_logs
|
||
WHERE year = 2023 AND month = 7 AND day = 28 AND hour = 10 AND minute BETWEEN 5 AND 25
|
||
AND activity = 'exit';
|
||
|
||
-- 5P2BI95
|
||
-- 94KL13X
|
||
-- 6P58WS2
|
||
-- 4328GD8
|
||
-- G412CB7
|
||
-- L93JTIZ
|
||
-- 322W7JE
|
||
-- 0NTHK55
|
||
|
||
|
||
-- Get structure of atm_transactions
|
||
.schema atm_transactions
|
||
|
||
-- id INTEGER,
|
||
-- account_number INTEGER,
|
||
-- year INTEGER,
|
||
-- month INTEGER,
|
||
-- day INTEGER,
|
||
-- atm_location TEXT,
|
||
-- transaction_type TEXT,
|
||
-- amount INTEGER,
|
||
-- PRIMARY KEY(id)
|
||
|
||
-- Get account numbers of withdrawals from Leggett Street ATM on the day of theft
|
||
SELECT account_number FROM atm_transactions
|
||
WHERE year = 2023 AND month = 7 AND day = 28
|
||
AND atm_location = 'Leggett Street' AND transaction_type = 'withdraw';
|
||
|
||
-- 28500762
|
||
-- 28296815
|
||
-- 76054385
|
||
-- 49610011
|
||
-- 16153065
|
||
-- 25506511
|
||
-- 81061156
|
||
-- 26013199
|
||
|
||
|
||
-- Get structure of phone_calls
|
||
.schema phone_calls
|
||
|
||
-- id INTEGER,
|
||
-- caller TEXT,
|
||
-- receiver TEXT,
|
||
-- year INTEGER,
|
||
-- month INTEGER,
|
||
-- day INTEGER,
|
||
-- duration INTEGER,
|
||
-- PRIMARY KEY(id)
|
||
|
||
-- Get caller and receiver of calls with duration under a minute
|
||
SELECT caller FROM phone_calls
|
||
WHERE year = 2023 AND month = 7 AND day = 28
|
||
AND duration < 60;
|
||
|
||
-- Caller | Receiver
|
||
-- (130) 555-0289 | (996) 555-8899
|
||
-- (499) 555-9472 | (892) 555-8872
|
||
-- (367) 555-5533 | (375) 555-8161
|
||
-- (499) 555-9472 | (717) 555-1342
|
||
-- (286) 555-6063 | (676) 555-6554
|
||
-- (770) 555-1861 | (725) 555-3243
|
||
-- (031) 555-6622 | (910) 555-3251
|
||
-- (826) 555-1652 | (066) 555-9701
|
||
-- (338) 555-6650 | (704) 555-2131
|
||
|
||
|
||
-- Get structure of flights
|
||
.schema flights
|
||
|
||
-- id INTEGER,
|
||
-- origin_airport_id INTEGER,
|
||
-- destination_airport_id INTEGER,
|
||
-- year INTEGER,
|
||
-- month INTEGER,
|
||
-- day INTEGER,
|
||
-- hour INTEGER,
|
||
-- minute INTEGER,
|
||
-- PRIMARY KEY(id),
|
||
-- FOREIGN KEY(origin_airport_id) REFERENCES airports(id),
|
||
-- FOREIGN KEY(destination_airport_id) REFERENCES airports(id)
|
||
|
||
-- Get structure of airports
|
||
.schema airports
|
||
|
||
-- id INTEGER,
|
||
-- abbreviation TEXT,
|
||
-- full_name TEXT,
|
||
-- city TEXT,
|
||
-- PRIMARY KEY(id)
|
||
|
||
-- Get structure of passengers
|
||
.schema passengers
|
||
|
||
-- flight_id INTEGER,
|
||
-- passport_number INTEGER,
|
||
-- seat TEXT,
|
||
-- FOREIGN KEY(flight_id) REFERENCES flights(id)
|
||
|
||
-- Get passengers (passport_number) of earliest flight out of Fiftyville the next day
|
||
SELECT passport_number FROM passengers
|
||
WHERE flight_id IN (
|
||
SELECT flights.id FROM flights
|
||
JOIN airports ON flights.origin_airport_id = airports.id
|
||
WHERE year = 2023 AND month = 7 AND day = 29
|
||
AND city = 'Fiftyville'
|
||
ORDER BY hour LIMIT 1
|
||
);
|
||
|
||
-- 7214083635
|
||
-- 1695452385
|
||
-- 5773159633
|
||
-- 1540955065
|
||
-- 8294398571
|
||
-- 1988161715
|
||
-- 9878712108
|
||
-- 8496433585
|
||
|
||
-- Get destination airport for that flight
|
||
SELECT city FROM airports
|
||
WHERE id IN (
|
||
SELECT destination_airport_id FROM flights
|
||
JOIN airports ON flights.origin_airport_id = airports.id
|
||
WHERE year = 2023 AND month = 7 AND day = 29
|
||
AND city = 'Fiftyville'
|
||
ORDER BY hour LIMIT 1
|
||
);
|
||
|
||
-- New York City
|
||
|
||
|
||
-- Get structure of people
|
||
.schema people
|
||
|
||
-- id INTEGER,
|
||
-- name TEXT,
|
||
-- phone_number TEXT,
|
||
-- passport_number INTEGER,
|
||
-- license_plate TEXT,
|
||
-- PRIMARY KEY(id)
|
||
|
||
-- Get structure of bank_accounts
|
||
.schema bank_accounts
|
||
|
||
-- account_number INTEGER,
|
||
-- person_id INTEGER,
|
||
-- creation_year INTEGER,
|
||
-- FOREIGN KEY(person_id) REFERENCES people(id)
|
||
|
||
-- Get the name of the thief and a phone number of accomplice
|
||
SELECT name, receiver FROM people
|
||
JOIN bank_accounts ON people.id = bank_accounts.person_id
|
||
JOIN phone_calls ON people.phone_number = phone_calls.caller
|
||
WHERE license_plate IN ( -- Licence plates of leaving customers from within 10 minutes of theft (10:15am)
|
||
SELECT license_plate FROM bakery_security_logs
|
||
WHERE year = 2023 AND month = 7 AND day = 28 AND hour = 10 AND minute BETWEEN 5 AND 25
|
||
AND activity = 'exit'
|
||
)
|
||
AND passport_number IN ( -- Ppassport numbers of people on earliest flight out of Fiftyville the next day
|
||
SELECT passport_number FROM passengers
|
||
WHERE flight_id IN (
|
||
SELECT flights.id FROM flights
|
||
JOIN airports ON flights.origin_airport_id = airports.id
|
||
WHERE year = 2023 AND month = 7 AND day = 29
|
||
AND city = 'Fiftyville'
|
||
ORDER BY hour LIMIT 1
|
||
)
|
||
AND phone_number IN ( -- Caller numbers with duration under a minute
|
||
SELECT caller FROM phone_calls
|
||
WHERE year = 2023 AND month = 7 AND day = 28
|
||
AND duration < 60
|
||
)
|
||
AND account_number IN ( -- Account numbers of withdrawals from Leggett Street ATM on the day of theft
|
||
SELECT account_number FROM atm_transactions
|
||
WHERE year = 2023 AND month = 7 AND day = 28
|
||
AND atm_location = 'Leggett Street' AND transaction_type = 'withdraw'
|
||
)
|
||
AND day = 28 AND duration < 60
|
||
);
|
||
|
||
-- Bruce
|
||
|
||
-- Get the name of the accomplice
|
||
SELECT name FROM people
|
||
WHERE phone_number IN (
|
||
SELECT receiver FROM people
|
||
JOIN bank_accounts ON people.id = bank_accounts.person_id
|
||
JOIN phone_calls ON people.phone_number = phone_calls.caller
|
||
WHERE license_plate IN ( -- Licence plates of leaving customers from within 10 minutes of theft (10:15am)
|
||
SELECT license_plate FROM bakery_security_logs
|
||
WHERE year = 2023 AND month = 7 AND day = 28 AND hour = 10 AND minute BETWEEN 5 AND 25
|
||
AND activity = 'exit'
|
||
)
|
||
AND passport_number IN ( -- Ppassport numbers of people on earliest flight out of Fiftyville the next day
|
||
SELECT passport_number FROM passengers
|
||
WHERE flight_id IN (
|
||
SELECT flights.id FROM flights
|
||
JOIN airports ON flights.origin_airport_id = airports.id
|
||
WHERE year = 2023 AND month = 7 AND day = 29
|
||
AND city = 'Fiftyville'
|
||
ORDER BY hour LIMIT 1
|
||
)
|
||
AND phone_number IN ( -- Caller numbers with duration under a minute
|
||
SELECT caller FROM phone_calls
|
||
WHERE year = 2023 AND month = 7 AND day = 28
|
||
AND duration < 60
|
||
)
|
||
AND account_number IN ( -- Account numbers of withdrawals from Leggett Street ATM on the day of theft
|
||
SELECT account_number FROM atm_transactions
|
||
WHERE year = 2023 AND month = 7 AND day = 28
|
||
AND atm_location = 'Leggett Street' AND transaction_type = 'withdraw'
|
||
)
|
||
AND day = 28 AND duration < 60
|
||
)
|
||
);
|
||
|
||
-- Robin
|