比较两个未提供正确结果的MYSQL时间戳列
我有两个表客户端和后续。我需要根据以下条件进行选择 如果客户t1表中的订户id不在后续t2和t1表中,则支付金额=0,t1.update\u余额>200 或 如果订户id在表中,则跟踪t2和t1。已付金额=0和t1。更新余额>200,如果t1.update\u时间大于t2.update\u时间,则也。 两个表中的更新时间都是MYSQLTIMESTAMP格式 我目前的查询如下:比较两个未提供正确结果的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
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
-------------------------------------------------------------------
正在向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
组合可能更好。注释不用于扩展讨论;此对话已结束。评论不用于扩展讨论;这段对话已经结束。