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

问题描述 投票:-1回答:1

我想要一个select查询,它返回当前日的所有行,只有当'amount'与前几天不同时才会返回。

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
sql sql-server
1个回答
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);
© www.soinside.com 2019 - 2024. All rights reserved.