gpt4 book ai didi

mysql - SQL 查找对应的阴性和阳性记录

转载 作者:行者123 更新时间:2023-11-29 11:34:24 26 4
gpt4 key购买 nike

我们有一个在 SQL Server 中实现的会计数据库。实际会计记录在 records具有以下架构的表(更改名称以保护无辜 + 删除不相关的列)。

`recordId` INT PRIMARY KEY
`amount` MONEY
`dateRecorded` DATE
`campaignYear` INT
`storeId` INT FOREIGN KEY (to the stores table)
`productId` INT FOREIGN KEY (to the products table)

添加了一些不良记录。业务规则阻止我们简单地删除记录,因此必须用相同数量的负记录将它们清零(即 4,521 美元的记录用 -$4,521 的记录清零)。

问题是一些负面记录与不正确的 productId 相关联。

我需要一个查询来显示在同一个campaignYear 中与不同productIds 相关联的所有相反数量的记录。

结果集如下所示:
recordId   | amount   | dateRecorded | campaignYear | storeId | productId
11545 | 1132.13 | '2015-05-14' | 2015 | 45 | 1729
90463 | -1132.13 | '2015-08-02' | 2015 | 45 | 2402
25487 | 9300.00 | '2011-01-13' | 2010 | 122 | 85060
67953 | -9300.00 | '2014-06-06' | 2010 | 122 | 11348
01045 | 5045.99 | '2001-11-29' | 2001 | 3 | 105
32468 | -5045.99 | '2016-08-01' | 2001 | 3 | 109

注意每对正/负记录的相同 storeId 但不同的 productId。

我真的不知道该怎么做。

提前致谢!

最佳答案

使用 exists .

select * from tablename t
where exists (select 1 from tablename t1
where t.amount = -1*t1.amount
and t.productid <> t1.productid
and t.campaignyear = t1.campaignyear
and t.storeid = t1.storeid)

使用 self-join .
select t.* 
from tablename t
JOIN tablename t1 ON t.productid <> t1.productid
and t.campaignyear = t1.campaignyear
and t.storeid = t1.storeid
WHERE t.amount = -t1.amount
ORDER BY t.storeid, abs(t.amount)

关于mysql - SQL 查找对应的阴性和阳性记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36851255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com