Tengo 2 mesas de cliente y seguimiento . Necesito seleccionar según las siguientes condiciones.
Si subscriber_id en la tabla cliente t1 NO EN la tabla de seguimiento t2 y t1.paid_amount = 0 Y t1.update_balance > 200
O
Si subscriber_id ESTÁ EN la tabla de seguimiento t2 y t1.paid_amount = 0 Y t1.update_balance > 200 Y TAMBIÉN si t1.update_time ES MAYOR QUE t2.update_time. Tanto el update_time en ambas tablas están en formato MYSQL TIMESTAMP .
Mi consulta actual es la siguiente:
SELECT t1.id,t1.subscriber_id,t1.paid_amount,t1.update_balance FROM client AS t1 LEFT OUTER JOIN followup AS t2 ON t1.subscriber_id = t2.subscriber_id WHERE (t2.subscriber_id IS NULL AND t1.paid_amount = 0 AND t1.update_balance > 200) OR (t2.subscriber_id IS NOT NULL AND t1.paid_amount = 0 AND t1.update_balance > 200 AND 't1.update_time'> 't2.update_time')Pero los datos no se seleccionan si t1.update_time > THAN t2.update_time..
Client Table: ------------------------------------------------------------------- id subscriber_id paid_amount update_balance update_time -------------------------------------------------------------------- 1 AB4567 0 500 2020-07-12 18:22:24 2. AB4568 0 300 2020-07-15 17:22:24 -------------------------------------------------------------------- Followup Table ------------------------------------------------------------------ id subscriber_id feedback update_time ------------------------------------------------------------------- 1. AB4567 paid 2020-07-12 17:22:24 -------------------------------------------------------------------Solicitando ayuda de expertos en Mysql..
No estoy seguro de que este sea todo el problema, pero
UNIX_TIMESTAMP('t1.update_time'> 't2.update_time')debiera ser
t1.update_time > t2.update_time Primero, no es necesario usar UNIX_TIMESTAMP al comparar, solo puede comparar las fechas directamente.
En segundo lugar, no debe citar los nombres de las columnas. Eso los convierte en cadenas literales. Consulte Cuándo usar comillas simples, comillas dobles y acentos graves en MySQL .
En tercer lugar, si usa UNIX_TIMESTAMP , debe llamarlo por separado en cada columna, por ejemplo
UNIX_TIMESTAMP(t1.update_time) > UNIX_TIMESTAMP(t2.update_time) Su código estaba comparando las cadenas, que se evalúa como TRUE , que es 1 , por lo que estaba evaluando UNIX_TIMESTAMP(1)
Para que toda la consulta funcione, divídala en dos consultas que combine con UNION .
SELECT t1.id,t1.subscriber_id,t1.paid_amount,t1.update_balance FROM client AS t1 LEFT OUTER JOIN followup AS t2 ON t1.subscriber_id = t2.subscriber_id WHERE t1.paid_amount = 0 AND t1.update_balance > 200 AND t2.subscriber_id IS NULL UNION SELECT t1.id,t1.subscriber_id,t1.paid_amount,t1.update_balance FROM client AS t1 INNER JOIN followup AS t2 ON t1.subscriber_id = t2.subscriber_id AND t1.update_time > t2.update_time WHERE t1.paid_amount = 0 AND t1.update_balance > 200