DROP TABLE IF EXISTS male_home_grid_2020;
CREATE TABLE male_home_grid_2020 AS
SELECT uid, age, province, city, date, home_grid_id
FROM (
SELECT
ua.uid,
ua.age,
ua.province,
ua.city,
CAST(SUBSTRING(ua.date, 1, 6) AS INT) AS date,
sp.final_grid_id AS home_grid_id,
ROW_NUMBER() OVER (PARTITION BY ua.uid, ua.date ORDER BY sp.final_grid_id) AS row_num
FROM user_attribute ua
JOIN stay_poi sp
ON ua.uid = sp.uid
WHERE ua.gender = '01'
AND sp.ptype = 1
AND ua.province = '广东省'
AND ua.city IN ('深圳', '深圳市')
AND CAST(SUBSTRING(ua.date, 1, 6) AS INT) BETWEEN 202001 AND 202012
) t
WHERE row_num = 1;
SELECT COUNT(*) FROM male_home_grid_2020;
DROP TABLE IF EXISTS male_user_relocation_2020;
CREATE TABLE male_user_relocation_2020 AS
SELECT
a.uid,
a.age,
a.province,
a.city,
a.date AS current_month,
a.home_grid_id AS current_grid,
b.date AS next_month,
b.home_grid_id AS next_grid
FROM male_home_grid_2020 a
JOIN male_home_grid_2020 b
ON a.uid = b.uid
AND a.province = b.province
AND a.city = b.city
AND b.date = a.date + 1
WHERE a.home_grid_id <> b.home_grid_id;
SELECT COUNT(*) FROM male_user_relocation_2020;
DROP TABLE IF EXISTS shenzhen_grid_migration_2020;
CREATE TABLE shenzhen_grid_migration_2020 AS
SELECT
current_grid,
next_grid,
COUNT(DISTINCT uid) AS num_migrated_users
FROM male_user_relocation_2020
GROUP BY current_grid, next_grid;
SELECT COUNT(*) FROM shenzhen_grid_migration_2020;
SELECT SUM(num_migrated_users) AS total_migrations FROM shenzhen_grid_migration_2020;
DROP TABLE IF EXISTS male_home_grid_2020;
CREATE TABLE male_home_grid_2020 AS
SELECT uid, age, province, city, date, home_grid_id
FROM (
SELECT
ua.uid,
ua.age,
ua.province,
ua.city,
CAST(SUBSTRING(ua.date, 1, 6) AS INT) AS date,
sp.final_grid_id AS home_grid_id,
ROW_NUMBER() OVER (PARTITION BY ua.uid, ua.date ORDER BY sp.final_grid_id) AS row_num
FROM user_attribute ua
JOIN stay_poi sp
ON ua.uid = sp.uid
WHERE ua.gender IN ('01', '1')
AND sp.ptype = 1
AND ua.province = '广东省'
AND ua.city IN ('深圳', '深圳市')
AND CAST(SUBSTRING(ua.date, 1, 6) AS INT) BETWEEN 202001 AND 202012
) t
WHERE row_num = 1;
SELECT COUNT(*) FROM male_home_grid_2020;
DROP TABLE IF EXISTS male_user_relocation_2020;
CREATE TABLE male_user_relocation_2020 AS
SELECT
a.uid,
a.age,
a.province,
a.city,
a.date AS current_month,
a.home_grid_id AS current_grid,
b.date AS next_month,
b.home_grid_id AS next_grid
FROM male_home_grid_2020 a
JOIN male_home_grid_2020 b
ON a.uid = b.uid
AND a.province = b.province
AND a.city = b.city
AND CAST(b.date AS INT) = CAST(a.date AS INT) + 1
WHERE a.home_grid_id <> b.home_grid_id;
SELECT COUNT(*) FROM male_user_relocation_2020;
DROP TABLE IF EXISTS shenzhen_grid_migration_2020;
CREATE TABLE shenzhen_grid_migration_2020 AS
SELECT
current_grid,
next_grid,
COUNT(DISTINCT uid) AS num_migrated_users
FROM male_user_relocation_2020
GROUP BY current_grid, next_grid;
SELECT COUNT(*) FROM shenzhen_grid_migration_2020;
SELECT SUM(num_migrated_users) AS total_migrations FROM shenzhen_grid_migration_2020;