SQL - 字段随时间变化的地方

时间:2014-01-08 22:39:58

标签: sql time duplicates where

我正在运行SQL server management studio,我的表/数据集包含大约700K行。该表是每个月的帐户列表。因此,在每个月的开始,对所有帐户(以及谁拥有它们)等进行快照,并且用于更新数据集。有问题的2个字段是AccountID和Rep(我想你可以说是月份)。这个查询真的应该很简单但TBH,我必须继续其他事情,所以我想我会把它扔到这里以获得一些帮助。

基本上,我需要提取在某些时候更改了代表的不同AccountID。请参阅下面我正在思考的截图:

enter image description here

思想?

---我应该注意,例如,账户ID ABC1159未包括在结果中,它只出现一次,并且永远不会被任何其他代表处理。

---另外,另一个参数是,如果第一次出现一个帐户,并且代表名称出现在某个列表中,然后移动到另一个代表,那很好。例如,如果代表的第一个实例说“友好帐户管理员”或“支持专家”,然后移动到另一个名称,则可以从结果字段中排除这些名称。因此,如果第一个实例出现在此列表中,那么我们基本上需要一个where语句或消除这些结果的东西,然后有一个实例,其中名称已更改,但之后没有。我们的目标是看看在代表收到人类代表之后(因此他们在该名单中没有名字),他们是否在某个时间点改变了人类代表。

3 个答案:

答案 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)

您希望首先隔离不同的AccountIDRep组合,然后您希望使用GROUP BYHAVING来查找具有多个值的AccountIDRep值:

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