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

时间:2018-07-18 18:43:23

标签: sql sql-server

我希望有一个选择查询,该查询可以向我返回当天的所有行,前提是“金额”与前几天不同。

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

1 个答案:

答案 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);