mysql - 两个 MYSQL TIMESTAMP 列的比较未提供正确结果
问题描述
我有 2 个表client和followup。我需要根据以下条件进行选择。
如果表 client t1 中的subscriber_id NOT IN后续表 t2 和 t1.paid_amount = 0 AND t1.update_balance > 200
或者
如果subscriber_id在表后续t2 中,并且t1.paid_amount = 0 AND t1.update_balance > 200并且如果t1.update_time 大于t2.update_time。两个表中的 update_time 都是 MYSQL TIMESTAMP格式。
我目前的查询如下:
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_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
-------------------------------------------------------------------
- 如果subscriber_id不在表 2 中 - 显示 ROW
- Ifsubscriber_id IN table 2 -如果 t1.update_time > t2.update_time 则显示
请求 MySQL 专家的帮助..
解决方案
我不确定这是整个问题,但是
UNIX_TIMESTAMP('t1.update_time'> 't2.update_time')
应该
t1.update_time > t2.update_time
首先,比较时无需使用UNIX_TIMESTAMP
,直接比较日期即可。
其次,您不应该引用列名。这使它们成为字符串文字。请参阅何时在 MySQL 中使用单引号、双引号和反引号。
第三,如果你使用UNIX_TIMESTAMP
,你需要在每一列上分别调用它,例如
UNIX_TIMESTAMP(t1.update_time) > UNIX_TIMESTAMP(t2.update_time)
您的代码正在比较字符串,其计算结果为TRUE
,即1
,所以它正在评估
UNIX_TIMESTAMP(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
推荐阅读
- typescript - 在 Typescript 中设置模型属性的默认值
- flutter - 颤振图像变量
- javascript - jexcel仅将下拉列表添加到一行
- r - 如何将特定列与其余列分开
- c# - 为什么 EF 核心没有比较 DateTimeOffset?
- javascript - 映射对象返回 false
- php - 在 Laravel 中对数组进行排序
- matlab - matlab分层交叉验证分区中的错误“CVPARTITION最多可以有一个可选参数”
- javascript - 如何创建一个 html 表格来显示具有不同字段的对象数组?
- json - Powershell 脚本 - Azure sql db - json 文件