cs50/log.sql

296 lines
8.9 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 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