让我们假设我有一个跟踪客户的电子商务,并根据他们的行为给他们一个分数。
我想创建一个表(分数),为每个特定客户注册此分数,如果不同则更新总分并注册更新日期。
id hash score update_date added_date
1 abc 3 2017-07-11 2017-07-10
2 def 1 2017-07-12 2017-07-11
3 ghi 10 2017-07-13 2017-07-12
4 jkl 7 2017-07-13 2017-07-12
我正在设法创建一个MYSQL语句以完成此任务,并且只有在分数与前一个分数不同时才更新条目,同样基于客户端哈希(而不是id)。
让我们说今天,第二个客户端(hash" def")将分数从1改为15,所有其他客户端保持不变。
我尝试了以下SQL语句作为示例,但是(不知道为什么)有时我的updated_date即使得分相同也会改变,就像第一种情况一样(客户端哈希&#34; abc&#34 ;)分数仍然是3。</ p>
REPLACE INTO scores (id,hash,score,updated_date,added_date) SELECT id,"abc","3","2017-07-14",added_date) WHERE hash="abc" AND score<>"3"
REPLACE INTO scores (id,hash,score,updated_date,added_date) SELECT id,"def","15","2017-07-14",added_date) WHERE hash="def" AND score<>"1"
这是得到的结果:
id hash score update_date added_date
1 abc 3 2017-07-14 2017-07-10
2 def 15 2017-07-14 2017-07-11
3 ghi 10 2017-07-14 2017-07-12
4 jkl 7 2017-07-14 2017-07-12
这是预期的结果:
id hash score update_date added_date
1 abc 3 2017-07-11 2017-07-10
2 def 15 2017-07-14 2017-07-11
3 ghi 10 2017-07-13 2017-07-12
4 jkl 7 2017-07-13 2017-07-12