我正在运行SQL server management studio,我的表/数据集包含大约700K行。该表是每个月的帐户列表。因此,在每个月的开始,对所有帐户(以及谁拥有它们)等进行快照,并且用于更新数据集。有问题的2个字段是AccountID和Rep(我想你可以说是月份)。这个查询真的应该很简单但TBH,我必须继续其他事情,所以我想我会把它扔到这里以获得一些帮助。
基本上,我需要提取在某些时候更改了代表的不同AccountID。请参阅下面我正在思考的截图:
思想?
---我应该注意,例如,账户ID ABC1159未包括在结果中,它只出现一次,并且永远不会被任何其他代表处理。
---另外,另一个参数是,如果第一次出现一个帐户,并且代表名称出现在某个列表中,然后移动到另一个代表,那很好。例如,如果代表的第一个实例说“友好帐户管理员”或“支持专家”,然后移动到另一个名称,则可以从结果字段中排除这些名称。因此,如果第一个实例出现在此列表中,那么我们基本上需要一个where语句或消除这些结果的东西,然后有一个实例,其中名称已更改,但之后没有。我们的目标是看看在代表收到人类代表之后(因此他们在该名单中没有名字),他们是否在某个时间点改变了人类代表。
答案 0 :(得分:1)
试试这个:
SELECT t.AccountID
FROM [table] t
WHERE NOT EXISTS(SELECT * FROM [reps table] r WHERE r.Rep = t.Rep AND r.[is not human])
GROUP BY t.AccountID
HAVING COUNT(DISTINCT t.Rep) > 1;
答案 1 :(得分:0)
您希望首先隔离不同的AccountID
和Rep
组合,然后您希望使用GROUP BY
和HAVING
来查找具有多个值的AccountID
值Rep
值:
SELECT AccountID
FROM (SELECT DISTINCT AccountID, Rep
FROM YourTable
WHERE Rep NOT IN ('Support Specialist','Friendly Account Manager')
)sub
GROUP BY AccountID
HAVING COUNT(*) > 1
答案 2 :(得分:0)
在表上尝试SELECT DISTINCT并将表连接到自身 - 就像这样 - 使用Account作为我给你的表的名称:
SELECT DISTINCT A1.AccountID,A1.Rep,A1.ReportMonth 来自AccountTable.AccountID A1 INNER JOIN AccountTable A2 ON A1.AccountID = A2.AccountID 和A1.Rep<> A2.Rep 订购A1.AccountD