Files
Temp_MSSPLASHPage/SQL/debug_recovery_rate_empty.sql
2025-10-22 08:05:42 -06:00

158 lines
5.7 KiB
SQL

-- ============================================================================
-- DIAGNÓSTICO: ¿Por qué "Tasa de Recuperación" está vacía?
-- ============================================================================
-- Este SQL diagnostica por qué el widget no muestra datos
-- Parámetros (ajustar según tu dashboard)
DO $$
DECLARE
start_date DATE := '2025-01-01';
end_date DATE := CURRENT_DATE;
BEGIN
RAISE NOTICE '=== DIAGNÓSTICO: Widget Tasa de Recuperación ===';
RAISE NOTICE '';
-- ============================================================================
-- PASO 1: ¿Hay usuarios con is_recovered_user = true?
-- ============================================================================
RAISE NOTICE '--- PASO 1: Usuarios con is_recovered_user = true ---';
SELECT
COUNT(*) as total_registros,
COUNT(DISTINCT client_mac) as usuarios_unicos,
COUNT(DISTINCT CASE WHEN user_id > 0 THEN user_id END) as usuarios_con_cuenta
FROM splash_wifi_connection_report
WHERE is_recovered_user = true
AND connection_date BETWEEN start_date AND end_date
AND NOT is_deleted;
-- ============================================================================
-- PASO 2: ¿Cuántos tienen RecoveryConnectionDate?
-- ============================================================================
RAISE NOTICE '';
RAISE NOTICE '--- PASO 2: Usuarios con recovery_connection_date ---';
SELECT
'Con RecoveryConnectionDate' as categoria,
COUNT(DISTINCT client_mac) as usuarios_unicos,
COUNT(DISTINCT CASE WHEN user_id > 0 THEN user_id END) as usuarios_con_cuenta
FROM splash_wifi_connection_report
WHERE is_recovered_user = true
AND recovery_connection_date IS NOT NULL
AND connection_date BETWEEN start_date AND end_date
AND NOT is_deleted
UNION ALL
SELECT
'SIN RecoveryConnectionDate' as categoria,
COUNT(DISTINCT client_mac) as usuarios_unicos,
COUNT(DISTINCT CASE WHEN user_id > 0 THEN user_id END) as usuarios_con_cuenta
FROM splash_wifi_connection_report
WHERE is_recovered_user = true
AND recovery_connection_date IS NULL
AND connection_date BETWEEN start_date AND end_date
AND NOT is_deleted;
-- ============================================================================
-- PASO 3: ¿Cuántos cumplen TODAS las condiciones del widget?
-- ============================================================================
RAISE NOTICE '';
RAISE NOTICE '--- PASO 3: Usuarios que cumplen TODAS las condiciones ---';
-- Condiciones del widget RecoveryRate:
-- 1. user_id > 0
-- 2. is_recovered_user = true
-- 3. recovery_connection_date IS NOT NULL
SELECT
COUNT(DISTINCT user_id) as usuarios_validos_para_recovery_rate
FROM splash_wifi_connection_report
WHERE user_id > 0
AND is_recovered_user = true
AND recovery_connection_date IS NOT NULL
AND connection_date BETWEEN start_date AND end_date
AND NOT is_deleted;
-- ============================================================================
-- PASO 4: ¿Hay usuarios inactivos (denominador)?
-- ============================================================================
RAISE NOTICE '';
RAISE NOTICE '--- PASO 4: Usuarios inactivos (más de 30 días) ---';
SELECT
COUNT(DISTINCT user_id) as total_usuarios_inactivos_30dias
FROM splash_wifi_connection_report
WHERE user_id > 0
AND days_inactive > 30
AND connection_date BETWEEN start_date AND end_date
AND NOT is_deleted;
-- ============================================================================
-- PASO 5: Detalle de los usuarios recuperados (si los hay)
-- ============================================================================
RAISE NOTICE '';
RAISE NOTICE '--- PASO 5: Detalle de usuarios recuperados (Top 10) ---';
SELECT
user_id,
client_mac,
user_name,
email,
is_recovered_user,
recovery_connection_date,
days_inactive,
COUNT(*) as total_conexiones,
MIN(connection_date) as primera_conexion,
MAX(connection_date) as ultima_conexion
FROM splash_wifi_connection_report
WHERE user_id > 0
AND is_recovered_user = true
AND connection_date BETWEEN start_date AND end_date
AND NOT is_deleted
GROUP BY user_id, client_mac, user_name, email, is_recovered_user, recovery_connection_date, days_inactive
ORDER BY recovery_connection_date DESC NULLS LAST
LIMIT 10;
-- ============================================================================
-- RESUMEN DIAGNÓSTICO
-- ============================================================================
RAISE NOTICE '';
RAISE NOTICE '=== RESUMEN DIAGNÓSTICO ===';
RAISE NOTICE '';
RAISE NOTICE 'El widget "Tasa de Recuperación" requiere:';
RAISE NOTICE ' 1. user_id > 0 (usuario con cuenta)';
RAISE NOTICE ' 2. is_recovered_user = true';
RAISE NOTICE ' 3. recovery_connection_date IS NOT NULL ⚠️ CRÍTICO';
RAISE NOTICE ' 4. days_inactive > 30 (para calcular denominador)';
RAISE NOTICE '';
RAISE NOTICE 'Si el resultado del PASO 3 es 0:';
RAISE NOTICE ' → Falta el campo recovery_connection_date';
RAISE NOTICE ' → Solución: Verificar cómo se calcula este campo en la vista';
RAISE NOTICE '';
RAISE NOTICE 'Si el resultado del PASO 4 es 0:';
RAISE NOTICE ' → No hay usuarios inactivos suficientes';
RAISE NOTICE ' → Normal si el período es corto o todos son activos';
END $$;
-- ============================================================================
-- QUERY RÁPIDO DE VERIFICACIÓN
-- ============================================================================
-- Ver un ejemplo de registro recuperado
SELECT
user_id,
client_mac,
is_recovered_user,
recovery_connection_date,
days_inactive,
loyalty_type,
connection_date,
connection_date_time
FROM splash_wifi_connection_report
WHERE is_recovered_user = true
AND NOT is_deleted
ORDER BY connection_date DESC
LIMIT 5;