如何通过查询筛选与Amount=230同日期的维度一致数据
需求说明
现有数据中,部分记录的Account、Item、Project、Location、Date、Version字段内容完全一致,仅Amount字段存在差异。数据示例如下:
| Account | Item | Project | Location | Date | Version | Amount |
|---|---|---|---|---|---|---|
| Acc1 | 1001 | B1 | CA | 11/27/2022 | Actual | 100 |
| Acc1 | 1001 | B1 | CA | 11/27/2022 | Actual | 230 |
| Acc6 | 3001 | A1 | BA | 11/28/2022 | Actual | 70 |
| Acc6 | 3010 | A2 | AA | 11/29/2022 | Actual | 400 |
| Acc7 | 7001 | B2 | CD | 11/30/2022 | Actual | 620 |
需要筛选出与Amount为230的记录同日期的所有数据。
实现方案
方法1:子查询匹配日期
先通过子查询定位Amount=230对应的日期,再筛选该日期下的所有记录:
SELECT * FROM your_table_name WHERE Date = (SELECT Date FROM your_table_name WHERE Amount = 230);
方法2:自连接筛选
利用自连接关联目标日期的记录,获取结果:
SELECT t1.* FROM your_table_name t1 JOIN your_table_name t2 ON t1.Date = t2.Date WHERE t2.Amount = 230;
特殊情况处理
如果存在多条Amount=230但日期不同的记录,方法1的子查询会返回多行导致报错,此时改用IN关键字:
SELECT * FROM your_table_name WHERE Date IN (SELECT Date FROM your_table_name WHERE Amount = 230);
注:请将上述语句中的
your_table_name替换为实际的表名。
内容的提问来源于stack exchange,提问作者Arif
相关产品推荐
相关产品推荐

