首页 > 解决方案 > 仅当它们与前几天的值不同时才返回行

问题描述

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

因此,如果您在 5 日搜索记录,您将得到 1 行,因为它与前几天不同。

5   123    700  2017/01/05

但如果您在 3 日运行查询,由于 1500 美元的金额与 2 日相同,您将得到 0 个结果。

希望这可以清除它。

标签: sqlsql-server

解决方案


您可以尝试为此使用 Lead() 和 Lag() SQL Analytic 函数

SELECT *
from (SELECT *, LAG(AMOUNT) over (partition by user_id order by datetime) as Yesterday_AMOUNT
      from SALES s
     ) x
where cast(s.datetime as date) = cast(getdaate() as date) and 
       x.AMOUNT <> s.Yesterday_AMOUNT;

推荐阅读