-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathirctc_queries.sql
68 lines (61 loc) · 2.54 KB
/
irctc_queries.sql
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
/*
===================================================
IRCTC Real-Time Data Pipeline - SQL Queries
Author: Sujit Mahapatra
Description: This file contains essential SQL scripts
for data processing, transformation, and analysis
in BigQuery as part of the IRCTC real-time data pipeline.
===================================================
*/
-- =========================================
-- 1. Insert Sample Data into IRCTC Table
-- =========================================
INSERT INTO `irctc_dwh.irctc_stream_tb`
(row_key, name, age, email, join_date, last_login, loyalty_points, account_balance, is_active, inserted_at, updated_at, loyalty_status, account_age_days)
VALUES
('1', 'Amit Kumar', 28, '[email protected]', '2020-01-15', CURRENT_TIMESTAMP(), 500, 2000.50, TRUE, CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP(), 'Gold', 1500);
-- =========================================
-- 2. Retrieve Recently Active Users
-- =========================================
SELECT name, email, last_login, loyalty_status
FROM `irctc_dwh.irctc_stream_tb`
WHERE is_active = TRUE
ORDER BY last_login DESC
LIMIT 100;
-- =========================================
-- 3. Compute Loyalty Points Summary
-- =========================================
SELECT loyalty_status, COUNT(*) AS total_users, AVG(loyalty_points) AS avg_points
FROM `irctc_dwh.irctc_stream_tb`
GROUP BY loyalty_status
ORDER BY avg_points DESC;
-- =========================================
-- 4. Identify Users with Low Account Balance
-- =========================================
SELECT name, email, account_balance
FROM `irctc_dwh.irctc_stream_tb`
WHERE account_balance < 500
ORDER BY account_balance ASC;
-- =========================================
-- 5. Detect Inactive Users (Last Login > 1 Year)
-- =========================================
SELECT name, email, last_login
FROM `irctc_dwh.irctc_stream_tb`
WHERE last_login < TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 YEAR);
-- =========================================
-- 6. Update Loyalty Status Based on Points
-- =========================================
UPDATE `irctc_dwh.irctc_stream_tb`
SET loyalty_status =
CASE
WHEN loyalty_points >= 1000 THEN 'Platinum'
WHEN loyalty_points BETWEEN 500 AND 999 THEN 'Gold'
ELSE 'Silver'
END
WHERE is_active = TRUE;
-- =========================================
-- 7. Remove Inactive Users (More than 2 Years)
-- =========================================
DELETE FROM `irctc_dwh.irctc_stream_tb`
WHERE is_active = FALSE
AND last_login < TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 2 YEAR);