diff --git a/DSL/Resql/analytics/POST/status-all-chats.sql b/DSL/Resql/analytics/POST/status-all-chats.sql index 61a1726a..c04963b0 100644 --- a/DSL/Resql/analytics/POST/status-all-chats.sql +++ b/DSL/Resql/analytics/POST/status-all-chats.sql @@ -1,20 +1,27 @@ +WITH latest_messages AS ( + SELECT DISTINCT ON (message.chat_base_id) + message.chat_base_id, + message.event + FROM message + WHERE message.event IN (:events) + ORDER BY message.chat_base_id, message.updated DESC +) SELECT date_trunc(:metric, chat.ended) AS date_time, - message.event AS event, + lm.event AS event, COUNT(DISTINCT chat.base_id) FROM chat - JOIN message - ON chat.base_id = message.chat_base_id + JOIN latest_messages lm + ON chat.base_id = lm.chat_base_id WHERE chat.status = 'ENDED' - AND message.event IN (:events) - AND ( - array_length(ARRAY[:urls]::TEXT[], 1) IS NULL + AND ( + array_length(ARRAY[:urls]::TEXT[], 1) IS NULL OR chat.end_user_url LIKE ANY(ARRAY[:urls]::TEXT[]) ) - AND ( - :showTest = TRUE + AND ( + :showTest = TRUE OR chat.test = FALSE ) - AND chat.ended::timestamptz BETWEEN :start::timestamptz AND :end::timestamptz + AND chat.ended::timestamptz BETWEEN :start::timestamptz AND :end::timestamptz GROUP BY date_time, event ORDER BY event; diff --git a/DSL/Resql/analytics/POST/status-csa-chats.sql b/DSL/Resql/analytics/POST/status-csa-chats.sql index e9ae521a..eed321d1 100644 --- a/DSL/Resql/analytics/POST/status-csa-chats.sql +++ b/DSL/Resql/analytics/POST/status-csa-chats.sql @@ -1,20 +1,28 @@ +WITH latest_messages AS ( + SELECT DISTINCT ON (message.chat_base_id) + message.chat_base_id, + message.event + FROM message + WHERE message.event IN (:events) + AND message.author_role = 'backoffice-user' + ORDER BY message.chat_base_id, message.updated DESC +) SELECT date_trunc(:metric, chat.ended) AS date_time, - message.event AS event, + lm.event AS event, COUNT(DISTINCT chat.base_id) FROM chat - JOIN message ON chat.base_id = message.chat_base_id + JOIN latest_messages lm + ON chat.base_id = lm.chat_base_id WHERE chat.status = 'ENDED' - AND message.event IN (:events) - AND message.author_role = 'backoffice-user' - AND ( - array_length(ARRAY[:urls]::TEXT[], 1) IS NULL + AND ( + array_length(ARRAY[:urls]::TEXT[], 1) IS NULL OR chat.end_user_url LIKE ANY(ARRAY[:urls]::TEXT[]) ) - AND ( - :showTest = TRUE + AND ( + :showTest = TRUE OR chat.test = FALSE ) - AND chat.ended::timestamptz BETWEEN :start::timestamptz AND :end::timestamptz + AND chat.ended::timestamptz BETWEEN :start::timestamptz AND :end::timestamptz GROUP BY date_time, event ORDER BY event;