【问题标题】:SQL - Filter Data only showing changes historySQL - 过滤数据仅显示更改历史记录
【发布时间】:2020-10-30 07:48:18
【问题描述】:

我有一张桌子好像:

| ID_产品 |产品 |价格 |日期 | -------------------------------------------------- ---- | 01 |袜子 | 20 美元 | 2020-06-02 18:27:49.000 | | 03 |腰带 | 30 美元 | 2020-06-03 13:27:08.000 | | 01 |袜子 | 20 美元 | 2020-06-11 17:00:04.000 | | 02 |靴子 | 40 美元 | 2020-06-12 09:27:19.000 | | 02 |靴子 | 40 美元 | 2020-06-17 11:27:10.000 | | 01 |袜子 | 25 美元 | 2020-06-25 15:29:45.000 | | 01 |袜子 | 28 美元 | 2020-07-08 16:27:30.000 |

我需要一个查询来按价格和日期获取不同的行,以获取一些价格变化的“历史”,就像这样

| ID_产品 |产品 |价格 |日期 | -------------------------------------------------- ---- | 03 |腰带 | 30 美元 | 2020-06-03 13:27:08.000 | | 01 |袜子 | 20 美元 | 2020-06-11 17:00:04.000 | | 02 |靴子 | 40 美元 | 2020-06-17 11:27:10.000 | | 01 |袜子 | 25 美元 | 2020-06-25 15:29:45.000 | | 01 |袜子 | 28 美元 | 2020-07-08 16:27:30.000 |

谢谢!

【问题讨论】:

标签: sql sql-server tsql select distinct


【解决方案1】:

您似乎只想要每个产品价格的最近日期:

select product_id, price, max(date)
from t
group by product_id, price;

我以为您想知道新价格何时开始生效。为了那个原因, 您可以使用lag() 查看价格何时发生变化——并且只保留这些行:

select t.*
from (select t.*,
             lag(price) over (partition by product_id order by date) as prev_price
      from t
     ) t
where prev_price is null or prev_price <> price;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2019-01-06
    相关资源
    最近更新 更多