拉取从一个日期到日期有变化的行

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

我有两个基表:

表A

日期 客户编号 颜色 定价类型
01/01 A 蓝色 自动
01/01 蓝色 自动
01/01 C 蓝色 自动
01/01 D 蓝色 自动

B桌

日期 客户编号 颜色 定价类型
02/01 A 红色 自动
02/01 蓝色 自动
02/01 C 蓝色 手册
02/01 D 蓝色 自动

我想浏览至少有一个变化的行。日期列和客户 ID 列永远不会改变。

所以我期望从上面得到的结果是:

日期 客户编号 颜色 定价类型
02/01 A 红色 自动
02/01 C 蓝色 手册

我们使用 SQL Presto,所以考虑到这一点的答案会很棒!

谢谢!

只拉取从第一行到下一行有一个变化的行

sql presto
1个回答
0
投票

你可以试试这个:

使用

UNION
将两个表合并为一个,然后我们使用
group by
having()
只得到唯一的行。

WITH CTE
用于获取至少有一处更改的行。然后使用 join 和
MAX date
来获取最新的行

WITH CTE AS (
  select Customer_ID, Colour, Pricing_type, max(DATE) AS DATE
  from (
    select *
    from TableA
    union all
    select *
    from TableB
  ) as s
  group by Customer_ID, Colour, Pricing_type
  HAVING COUNT(1) = 1
)
SELECT  c.*
FROM CTE c
INNER JOIN (
  SELECT Customer_ID, MAX(DATE) as DATE
  FROM CTE
  GROUP BY Customer_ID
) s on s.Customer_ID = c.Customer_ID and s.DATE = c.DATE
© www.soinside.com 2019 - 2024. All rights reserved.