请求协助:基于多行数据创建缺失/不匹配数据查询
针对买卖方数据缺失/不匹配的查询方案
兄弟,太懂这种卡好几天的憋屈感了!试了各种JOIN和WITH都没头绪,大概率是咱们没把数据的结构拆明白——毕竟你这张表把买卖两边的字段都塞一块了,直接硬JOIN很容易绕进去。我给你捋个清晰的思路:
首先,咱们得把买方数据和卖方数据拆成两个独立的数据集,这样对比起来就清楚多了:
WITH BuySide AS ( SELECT BuySideTradeDate AS TradeDate, BuySideContract AS Contract, BuySidePrice AS Price, BuySideQuantity AS Quantity FROM your_table WHERE BuySideContract IS NOT NULL -- 只保留有买方记录的行 ), SellSide AS ( SELECT SellSideTradeDate AS TradeDate, SellSideContract AS Contract, SellSidePrice AS Price, SellSideQuantity AS Quantity FROM your_table WHERE SellSideContract IS NOT NULL -- 只保留有卖方记录的行 )
接下来,分三种核心场景查询缺失或不匹配的数据:
1. 只有买方记录、无对应卖方的合约
SELECT '无对应卖方记录' AS 不匹配类型, b.* FROM BuySide b LEFT JOIN SellSide s ON b.Contract = s.Contract WHERE s.Contract IS NULL
2. 只有卖方记录、无对应买方的合约
SELECT '无对应买方记录' AS 不匹配类型, s.* FROM SellSide s LEFT JOIN BuySide b ON s.Contract = b.Contract WHERE b.Contract IS NULL
3. 合约存在但价格/数量不匹配的情况
(这里假设匹配逻辑是同一合约+同一交易日的买卖数据应该对应,如果你的业务逻辑是按其他维度匹配,把JOIN条件改了就行)
SELECT '价格/数量不匹配' AS 不匹配类型, b.Contract AS 合约编号, b.TradeDate AS 交易日期, b.Price AS 买方价格, s.Price AS 卖方价格, b.Quantity AS 买方数量, s.Quantity AS 卖方数量 FROM BuySide b JOIN SellSide s ON b.Contract = s.Contract AND b.TradeDate = s.TradeDate WHERE b.Price != s.Price OR b.Quantity != s.Quantity
额外提醒:
如果你的业务逻辑是“每一笔交易的买卖两边必须成对出现”,那当前的表结构其实不太合理——正常应该是买、卖各占一行,用唯一交易ID关联。不过基于你现有的表结构,上面的方法应该能帮你揪出问题。要是还有特殊的匹配规则(比如按时间段、特定价格区间),随时调整JOIN和WHERE条件就行!
内容的提问来源于stack exchange,提问作者xnetdude
相关产品推荐
相关产品推荐

