我有两个基表:
表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,所以考虑到这一点的答案会很棒!
谢谢!
只拉取从第一行到下一行有一个变化的行
你可以试试这个:
使用
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