addSql('DROP VIEW view_chill_person_household_address'); } public function getDescription(): string { return 'Create a view for assembling household, person and addresses'; } public function up(Schema $schema): void { $this->addSql( 'CREATE VIEW view_chill_person_household_address AS ' . 'SELECT ' . 'members.person_id AS person_id, ' . 'members.household_id AS household_id, ' . 'members.id AS member_id, ' . 'address.id AS address_id, ' . 'CASE WHEN address.validFrom < members.startDate THEN members.startDate ELSE address.validFrom END AS validFrom, ' . "CASE WHEN COALESCE(address.validTo, 'infinity') < COALESCE(members.endDate, 'infinity') THEN address.validTo ELSE members.endDate END AS validTo " . 'FROM chill_person_household_members AS members ' . 'JOIN chill_person_household_to_addresses AS household_to_addr ON household_to_addr.household_id = members.household_id ' . 'JOIN chill_main_address AS address ON household_to_addr.address_id = address.id ' . 'AND daterange(address.validFrom, address.validTo) && daterange(members.startDate, members.endDate) ' . 'WHERE members.sharedhousehold IS TRUE ' ); } }