Repository navigation
Expand file tree
/
Copy pathlibrary_circulation_management.sql
More file actions
84 lines (73 loc) · 2.76 KB
/
Copy pathlibrary_circulation_management.sql
File metadata and controls
84 lines (73 loc) · 2.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
* Library Circulation Management Demo
*
* Scenario:
* Tracking book checkouts, renewals, and overdue fines.
* Architecture: Medallion (Bronze -> Silver -> Gold)
* Goal: Optimize detailed collection purchasing and shelf space.
*/
-------------------------------------------------------------------------------
-- 0. SETUP
-------------------------------------------------------------------------------
CREATE FOLDER IF NOT EXISTS LibraryDB;
CREATE FOLDER IF NOT EXISTS LibraryDB.Bronze;
CREATE FOLDER IF NOT EXISTS LibraryDB.Silver;
CREATE FOLDER IF NOT EXISTS LibraryDB.Gold;
-------------------------------------------------------------------------------
-- 1. BRONZE LAYER
-------------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS LibraryDB.Bronze.Books (
ISBN VARCHAR,
Title VARCHAR,
Author VARCHAR,
Genre VARCHAR,
AcquiredDate DATE
);
CREATE TABLE IF NOT EXISTS LibraryDB.Bronze.Checkouts (
CheckoutID INT,
ISBN VARCHAR,
PatronID INT,
CheckoutDate DATE,
DueDate DATE,
ReturnDate DATE
);
INSERT INTO LibraryDB.Bronze.Books VALUES
('978-3-16-148410-0', 'SQL for Dummies', 'A. Author', 'Education', '2020-01-01'),
('978-0-7432-7356-5', 'The Great Gatsby', 'F. Scott Fitzgerald', 'Fiction', '2015-05-20');
INSERT INTO LibraryDB.Bronze.Checkouts VALUES
(1, '978-3-16-148410-0', 101, '2025-01-01', '2025-01-15', '2025-01-14'), -- On Time
(2, '978-0-7432-7356-5', 102, '2025-01-01', '2025-01-15', NULL); -- Overdue
-------------------------------------------------------------------------------
-- 2. SILVER LAYER
-------------------------------------------------------------------------------
CREATE OR REPLACE VIEW LibraryDB.Silver.CirculationStats AS
SELECT
c.CheckoutID,
b.Title,
b.Genre,
c.CheckoutDate,
c.ReturnDate,
CASE
WHEN c.ReturnDate IS NULL AND CURRENT_DATE > c.DueDate THEN 'Overdue'
WHEN c.ReturnDate > c.DueDate THEN 'Returned Late'
ELSE 'On Time'
END AS Status
FROM LibraryDB.Bronze.Checkouts c
JOIN LibraryDB.Bronze.Books b ON c.ISBN = b.ISBN;
-------------------------------------------------------------------------------
-- 3. GOLD LAYER
-------------------------------------------------------------------------------
CREATE OR REPLACE VIEW LibraryDB.Gold.GenrePopularity AS
SELECT
Genre,
COUNT(CheckoutID) AS TotalCheckouts,
SUM(CASE WHEN Status = 'Overdue' THEN 1 ELSE 0 END) AS CurrentOverdueCount
FROM LibraryDB.Silver.CirculationStats
GROUP BY Genre;
-------------------------------------------------------------------------------
-- 4. AGENT PROMPTS
-------------------------------------------------------------------------------
/*
PROMPT:
"Which Genre has the most TotalCheckouts in LibraryDB.Gold.GenrePopularity?"
*/