我希望有一个选择查询,该查询可以向我返回当天的所有行,前提是“金额”与前几天不同。
sales
-id
-user_id
-amount
-datetime
sales表每天为每个user_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
答案 0 :(得分:1)
您基本上有了查询。您只需要日期算术:
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);