Sql 如果列值与前几天记录不同,则返回行

Sql 如果列值与前几天记录不同,则返回行,sql,sql-server,Sql,Sql Server,我需要一个select查询,仅当“金额”与前几天不同时,该查询才会返回我当天的所有行 sales -id -user_id -amount -datetime sales表每天为每个用户id获取一条新记录 示例场景如下所示: 5 123 700 2017/01/05 4 123 500 2017/01/04 3 123 1500 2017/01/03 2 123 1500 2017/01/02 1 123 500 2017/01/01

我需要一个select查询,仅当“金额”与前几天不同时,该查询才会返回我当天的所有行

sales
-id
-user_id
-amount
-datetime
sales表每天为每个用户id获取一条新记录

示例场景如下所示:

5   123    700  2017/01/05
4   123    500  2017/01/04
3   123   1500  2017/01/03
2   123   1500  2017/01/02
1   123    500  2017/01/01
因此,如果你在1月5日搜索记录,你将得到1行,因为它与前几天不同(700对500)

结果:

5   123    700  2017/01/05
但是如果您在3号运行查询,由于1500美元的金额与2号相同,您将返回0个结果

我有这个基本连接,但我需要以某种方式比较s1中的当前天数行,并将其与前几天的金额值进行比较

select s1.*
from sales as s1
    inner join sales s2 on s1.user_id = s2.user_id and s1.datetime = s2.datetime

你基本上有这个查询。您只需要日期算术:

select s.*
from sales s left join
     sales sprev
     on sprev.user_id = s.user_id and sprev.datetime = dateadd(day, -1, s.datetime)
where s.datetime = '2018-01-05' and
      (s.amount <> sprev.amount or sprev.amount is null);
选择s*
从销售人员的左连接
销售sprev
在sprev.user_id=s.user_id和sprev.datetime=dateadd(day,-1,s.datetime)上
其中s.datetime='2018-01-05'和
(s.amount sprev.amount或sprev.amount为空);

这与您昨天发布的问题完全相同。我们看不到你的屏幕,也看不懂你的心思。“不起作用”是什么意思?你有错误吗?结果不正确?@SeanLange结果不正确,它只是在同一天加入结果。请尝试在
JOIN
语句中使用:
s1.DateTime=DateAdd(Day,-1,s2.DateTime)和s1.Amount s2.Amount
。不过,我会使用
左连接。如果这是该用户ID的第一个条目怎么办?你的意思是
中的
s.amount sprev.amount
。这就是OP的要求。非常感谢。