【问题标题】:Return rows only if they are different that previous days value仅当它们与前几天的值不同时才返回行
【发布时间】:2018-12-25 09:33:32
【问题描述】:
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 个结果。

希望这能解决问题。

【问题讨论】:

  • 编辑问题添加一些示例数据和所需的结果会有所帮助。
  • 你有足够的声望知道如何提问。提供样本数据(以CREATEINSERT 语句的形式)和您的预期结果。然后有人可以帮助你。 :)
  • @Larnu 我已经更新了问题。

标签: sql sql-server


【解决方案1】:

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

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;

【讨论】:

    【解决方案2】:

    你似乎想要:

    select *
    from (select *, lag(amount) over (partition by user_id order by datetime) as prev_amt
          from sales s
         ) s
    where cast(s.datetime as date) = cast(getdaate() as date) and 
           s.amount <> s.prev_amt;
    

    【讨论】:

      【解决方案3】:

      如果每天只提交一笔金额,则查询会有所帮助。 首先需要找到以前的金额。您可以使用分析函数 lag() over()。

       select *
          from (
              select *
                  , lag(amount) over (partition by id order by datetime) as prev_amount
              from sales
              ) as t1 
          where prev_amount <> amount
              and trunc(datetime) = 'today'
      

      【讨论】:

        【解决方案4】:

        这个查询会帮助你

        SELECT  r1.Code, r1.Date, r1.Rate
        FROM    RateTable r1
        WHERE   r1.Rate <> (SELECT TOP 1 Rate
                       FROM    RateTable
                       WHERE   Date < r1.Date
                       ORDER BY Date DESC)
        

        【讨论】:

          猜你喜欢
          • 2011-02-21
          • 1970-01-01
          • 1970-01-01
          • 2021-11-16
          • 1970-01-01
          相关资源
          最近更新 更多