sql - 在 SQL Server Query 中的 Join 操作期间避免重复
问题描述
我有几个日期表,如下所示
Date1(存储每个型号的折扣日期)
Year Model DiscountDate
2018 99L263 1/1/2017
2018 99L263 1/8/2018
2018 99L263 5/24/2018
Date2(存储每个模型的价格日期)
Year Model PriceDate
2018 99L263 1/1/2017
2018 99L263 1/8/2018
2018 99L263 3/1/2018
我正在尝试查找每种型号的所有折扣和价格日期。它导致笛卡尔积。
SELECT D1.Year
,D1.Model
,D1.DiscountDate
,D2.PriceDate
FROM Date1 D1
INNER JOIN Date2 D2 ON D1.Year = D2.Year
AND D1.Model = D2.Model
我得到这样的输出
Year Model DiscountDate PriceDate
2018 99L263 1/1/2017 1/1/2017
2018 99L263 1/1/2017 1/8/2018
2018 99L263 1/1/2017 3/1/2018
2018 99L263 1/8/2018 1/1/2017
2018 99L263 1/8/2018 1/8/2018
2018 99L263 1/8/2018 3/1/2018
2018 99L263 5/24/2018 1/1/2017
2018 99L263 5/24/2018 1/8/2018
2018 99L263 5/24/2018 3/1/2018
我的预期输出是
Year Model DiscountDate PriceDate
2018 99L263 1/1/2017 1/1/2017
2018 99L263 1/8/2018 1/8/2018
2018 99L263 5/24/2018 3/1/2018
我没有在加入条件中包含折扣日期,因为我无法加入日期,因为它可能彼此匹配,也可能不匹配。
解决方案
with cte1 as
(Select *, Row_Number() over (partition by year, model order by DiscountDate) as ranking from date1)
, cte2 as
(Select *, Row_Number() over (partition by year, model order by pricedate) as ranking from date2)
SELECT D1.Year
,D1.Model
,D1.DiscountDate
,D2.PriceDate
FROM cte1 D1
INNER JOIN cte2 D2 ON D1.Year = D2.Year
AND D1.Model = D2.Model AND D1.ranking = D2.ranking
推荐阅读
- python - Python,Panda.read_excel 从一张纸读取多组数据的问题
- sql - 使用 Node.js 客户端和连接池在 Postgres 中最快的查询 - 存储函数还是准备好的语句?
- javascript - ExtJs 第三方依赖在使用 app.json 时默认不起作用
- api - 如何使用 puppetdb API 组合事实
- javascript - 将 HTML 文件中的外部 javascript 文件从 android assets 文件夹加载到 WebView
- php - 将“卷曲”引号与数据库查询中的标准引号匹配
- javascript - 将字符串替换为 3 种模式“space”、“and”、“or”
- jquery - 仅在鼠标悬停 2 次后显示图像?
- scala - hive 1.1 从三个表中取出层次值
- sql - 需要一些帮助来解决分组的 SQL 问题