Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较两个未提供正确结果的MYSQL时间戳列_Mysql - Fatal编程技术网

比较两个未提供正确结果的MYSQL时间戳列

比较两个未提供正确结果的MYSQL时间戳列,mysql,Mysql,我有两个表客户端和后续。我需要根据以下条件进行选择 如果客户t1表中的订户id不在后续t2和t1表中,则支付金额=0,t1.update\u余额>200 或 如果订户id在表中,则跟踪t2和t1。已付金额=0和t1。更新余额>200,如果t1.update\u时间大于t2.update\u时间,则也。 两个表中的更新时间都是MYSQLTIMESTAMP格式 我目前的查询如下: SELECT t1.id,t1.subscriber_id,t1.paid_amount,t1.update_balan

我有两个表客户端后续。我需要根据以下条件进行选择

如果客户t1表中的订户id不在后续t2和t1表中,则支付金额=0,t1.update\u余额>200

如果订户id表中,则跟踪t2和t1。已付金额=0和t1。更新余额>200,如果t1.update\u时间大于t2.update\u时间,则也。 两个表中的更新时间都是MYSQLTIMESTAMP格式

我目前的查询如下:

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')
但是如果t1.update\u time>大于t2.update\u 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 
-------------------------------------------------------------------
  • 如果订户id不在表2中-显示行
  • 如果用户id在表2中-如果t1.update\u time>t2.update\u time,则显示

  • 正在向Mysql专家寻求帮助。

    我不确定这是全部问题,但是

    UNIX_TIMESTAMP('t1.update_time'> 't2.update_time')
    
    应该是

    t1.update_time > t2.update_time
    
    首先,比较时不需要使用
    UNIX\u TIMESTAMP
    ,您可以直接比较日期

    第二,你不应该引用列名。这使它们成为字符串文本。看

    第三,如果确实使用了
    UNIX\u TIMESTAMP
    ,则需要在每列上分别调用它,例如

    UNIX_TIMESTAMP(t1.update_time) > UNIX_TIMESTAMP(t2.update_time)
    
    您的代码正在比较字符串,其计算结果为
    TRUE
    ,即
    1
    ,因此它正在计算
    UNIX\u时间戳(1)

    要使整个查询正常工作,请将其拆分为两个查询,并与
    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
    

    我不确定这就是问题的全部,但是

    UNIX_TIMESTAMP('t1.update_time'> 't2.update_time')
    
    应该是

    t1.update_time > t2.update_time
    
    首先,比较时不需要使用
    UNIX\u TIMESTAMP
    ,您可以直接比较日期

    第二,你不应该引用列名。这使它们成为字符串文本。看

    第三,如果确实使用了
    UNIX\u TIMESTAMP
    ,则需要在每列上分别调用它,例如

    UNIX_TIMESTAMP(t1.update_time) > UNIX_TIMESTAMP(t2.update_time)
    
    您的代码正在比较字符串,其计算结果为
    TRUE
    ,即
    1
    ,因此它正在计算
    UNIX\u时间戳(1)

    要使整个查询正常工作,请将其拆分为两个查询,并与
    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
    

    为所需输出提供样本数据编写两个查询,并将其与
    UNION
    组合可能更好。为所需输出提供样本数据编写两个查询,并将其与
    UNION
    组合可能更好。注释不用于扩展讨论;此对话已结束。评论不用于扩展讨论;这段对话已经结束。