Для сортировки по самому позднему значению между двумя полями даты, где одно или оба могут быть NULL, в PostgreSQL есть несколько эффективных способов: SELECT * FROM your_table ORDER BY GREATEST( COALESCE(d_last_login, '1970-01-01'::timestamp), COALESCE(d_active, '1970-01-01'::timestamp) ) DESC; SELECT * FROM your_table ORDER BY CASE WHEN d_last_login IS NOT NULL AND d_active IS NOT NULL THEN GREATEST(d_last_login, d_active) WHEN d_last_login IS NOT NULL THEN d_last_login WHEN d_active IS NOT NULL THEN d_active ELSE NULL END DESC NULLS LAST; SELECT * FROM your_table ORDER BY ( SELECT MAX(dt) FROM (VALUES (d_last_login), (d_active)) AS dates(dt) WHERE dt IS NOT NULL ) DESC NULLS LAST; SELECT * FROM your_table ORDER BY ( SELECT MAX(date) FROM ( SELECT d_last_login AS date WHERE d_last_login IS NOT NULL UNION ALL SELECT d_active AS date WHERE d_active IS NOT NULL ) AS dates ) DESC NULLS LAST; Для большинства случаев я рекомендую вариант 3 (для PostgreSQL 9.5+) или вариант 2 (для более ст
PG: Сортировка по самому позднему заполненному полю из двух (d_last_login и d_active)
22 июня 202522 июн 2025
1 мин