Files
dbt_cloud/models/exchange/marts/warehouse/dim_exchange__companies.sql
T
2023-03-28 23:57:11 +08:00

179 lines
7.0 KiB
SQL

-- IMPORTS
WITH companies AS (
SELECT * FROM {{ ref('int_exchange__companies_level_segment') }}
),
company_addresses AS (
SELECT * FROM {{ ref('stg_exchange__company_addresses') }}
),
current_wallets AS (
SELECT * FROM {{ ref('stg_exchange__current_wallets') }}
),
companies_and_users_relations AS (
SELECT * FROM {{ ref('stg_exchange__companies_and_users_relations') }}
),
company_contacts AS (
SELECT * FROM {{ ref('int_exchange__latest_company_contacts') }}
),
documents AS (
SELECT * FROM {{ ref('stg_exchange__documents') }}
),
-- LOGICS
latest_billing_company_addresses AS (
SELECT
*,
-- 1 will be latest updated address, rank by updated_at date
row_number() OVER
(PARTITION BY company_addresses.company_id
ORDER BY company_addresses.updated_at DESC) AS lastest_address_rank
FROM company_addresses
WHERE
is_billing_address = 1
QUALIFY
lastest_address_rank = 1
),
company_current_wallets AS (
SELECT
id,
owner_id AS company_id,
amount,
currency_id,
currency_name,
created_at,
updated_at
FROM current_wallets
WHERE
owner_type = 'App\\Models\\Company'
),
count_company_user AS (
SELECT
company_id,
COUNT(user_id) AS count_user
FROM companies_and_users_relations
GROUP BY company_id
),
latest_company_upload_identity_documents AS (
SELECT
id,
owner_type,
owner_id AS company_id,
document_type AS identity_document_type_name,
reference AS identity_number,
status,
status_name,
approved_at,
created_at,
row_number() OVER
(PARTITION BY company_id
ORDER BY created_at DESC) AS latest_row_number
FROM documents
WHERE
owner_type = 'App\\Models\\Company'
AND
document_type IN ('IDENTITY_CARD','SSM_REGISTRATION')
AND
status = '2'
QUALIFY
latest_row_number = '1'
),
-- FINAL
final__dim_exchange__companies AS (
SELECT
companies.id,
companies.name,
companies.marking_id,
companies.account_software_id,
companies.company_type,
companies.company_type_name,
companies.business_type,
companies.business_type_name,
companies.segment_id,
companies.segment_name,
companies.is_migrated_company,
companies.status,
companies.status_name,
companies.created_at,
company_contacts.reference AS company_contact_reference,
company_contacts.phone AS company_contact_phone,
company_contacts.email AS company_contact_email,
company_contacts.wechat_id AS company_contact_wechat_id,
latest_billing_company_addresses.id AS address_id,
latest_billing_company_addresses.country_id,
latest_billing_company_addresses.country_name,
latest_billing_company_addresses.country_short_code,
latest_billing_company_addresses.state_id,
latest_billing_company_addresses.state_name,
latest_billing_company_addresses.district_id,
latest_billing_company_addresses.district_name,
latest_billing_company_addresses.postcode,
latest_billing_company_addresses.address_line_one,
latest_billing_company_addresses.address_line_two,
latest_billing_company_addresses.is_billing_address,
latest_billing_company_addresses.deleted_at AS address_deleted_at,
latest_billing_company_addresses.created_at AS address_created_at,
latest_billing_company_addresses.updated_at AS address_updated_at,
company_current_wallets.id AS wallet_id,
IFF(company_current_wallets.id IS NOT NULL, 1, 0) AS have_wallet,
company_current_wallets.amount AS wallet_balance,
company_current_wallets.currency_id AS wallet_currency_id,
company_current_wallets.currency_name AS wallet_currency_name,
company_current_wallets.created_at AS wallet_created_at,
company_current_wallets.updated_at AS wallet_updated_at,
latest_company_upload_identity_documents.identity_document_type_name,
latest_company_upload_identity_documents.identity_number,
latest_company_upload_identity_documents.status AS identity_status,
latest_company_upload_identity_documents.status_name AS identity_status_name,
latest_company_upload_identity_documents.approved_at AS identity_approved_datetime,
latest_company_upload_identity_documents.created_at AS identity_created_datetime,
count_company_user.count_user AS number_of_user
FROM companies
LEFT JOIN latest_billing_company_addresses
ON (companies.id = latest_billing_company_addresses.company_id)
LEFT JOIN company_current_wallets
ON (companies.id = company_current_wallets.company_id)
LEFT JOIN count_company_user
ON (companies.id = count_company_user.company_id)
LEFT JOIN company_contacts
ON (companies.id = company_contacts.company_id)
LEFT JOIN latest_company_upload_identity_documents
ON (companies.id = latest_company_upload_identity_documents.company_id)
)
SELECT * FROM final__dim_exchange__companies