-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSQLQuery4.sql
More file actions
38 lines (35 loc) · 1.49 KB
/
SQLQuery4.sql
File metadata and controls
38 lines (35 loc) · 1.49 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
--query4-Write a query to find gmail accounts with latest and first signup date and difference between both the dates and also write the query to replace null value with ‘1970-01-01’
CREATE TABLE email_signup (
id INTEGER,
email_id VARCHAR(100),
signup_date DATE
);
INSERT INTO email_signup (id, email_id, signup_date) VALUES
(1, '[email protected]', '2022-02-01'),
(2, '[email protected]', '2023-01-22'),
(3, '[email protected]', '2020-09-08'),
(4, '[email protected]', '2019-07-05'),
(5, '[email protected]', '2023-05-09'),
(6, '[email protected]', '2015-01-01'),
(7, '[email protected]', null);
WITH gmail_accounts AS (
SELECT
id,
email_id,
signup_date,
ROW_NUMBER() OVER (PARTITION BY SUBSTRING(email_id, CHARINDEX('@', email_id) + 1, LEN(email_id)) ORDER BY signup_date DESC) AS rn_latest,
ROW_NUMBER() OVER (PARTITION BY SUBSTRING(email_id, CHARINDEX('@', email_id) + 1, LEN(email_id)) ORDER BY signup_date ASC) AS rn_oldest
FROM
email_signup
WHERE
email_id LIKE '%@gmail.com'
)
SELECT
COUNT(*) AS count_gmail_account,
MAX(CASE WHEN rn_latest = 1 THEN signup_date ELSE NULL END) AS latest_signup_date,
MAX(CASE WHEN rn_oldest = 1 THEN signup_date ELSE NULL END) AS first_signup_date,
DATEDIFF(DAY, MAX(CASE WHEN rn_oldest = 1 THEN signup_date ELSE NULL END), MAX(CASE WHEN rn_latest = 1 THEN signup_date ELSE NULL END)) AS diff_in_days
FROM
gmail_accounts
WHERE
rn_latest = 1 OR rn_oldest = 1;