SELECT CAST(profile.id AS TEXT) AS userProfileId, account.id AS steamId, CAST(prisoner.id AS TEXT) AS gamePlayerId, COALESCE(NULLIF(profile.name, ''), NULLIF(account.name, ''), account.id) AS displayName, CAST(member.squad_id AS TEXT) AS squadId, squad.name AS squadName, profile.fame_points AS famePoints, MAX(CASE WHEN currency.currency_type = 1 THEN currency.account_balance END) AS normalBalance, MAX(CASE WHEN currency.currency_type = 2 THEN currency.account_balance END) AS goldBalance, entity.location_x AS x, entity.location_y AS y, entity.location_z AS z, profile.last_login_time AS lastLoginTime, strftime('%Y-%m-%dT%H:%M:%SZ', prisoner.last_save_time, 'unixepoch') AS lastSaveTime FROM user account LEFT JOIN user_profile profile ON profile.user_id = account.id LEFT JOIN prisoner ON prisoner.id = profile.prisoner_id LEFT JOIN prisoner_entity ON prisoner_entity.prisoner_id = prisoner.id LEFT JOIN entity ON entity.id = prisoner_entity.entity_id LEFT JOIN squad_member member ON member.user_profile_id = profile.id LEFT JOIN squad ON squad.id = member.squad_id LEFT JOIN bank_account_registry bank ON bank.account_owner_user_profile_id = profile.id LEFT JOIN bank_account_registry_currencies currency ON currency.bank_account_id = bank.id WHERE (:userProfileId IS NULL OR CAST(profile.id AS TEXT) = :userProfileId) AND (:steamId IS NULL OR account.id = :steamId) AND (:search IS NULL OR COALESCE(NULLIF(profile.name, ''), NULLIF(account.name, ''), account.id) LIKE '%' || :search || '%') GROUP BY account.id ORDER BY profile.last_login_time DESC LIMIT COALESCE(:limit, 500)