【发布时间】:2011-07-22 15:20:46
【问题描述】:
我有一个工作查询将从我的数据库中返回一些结果(记录),例如:
123|John Williams|IL|M|06/01/2011|ACTIVE
124|Mary Haque|NY|F|TERMINATED|06/30/2011
124|Mary Haque|NY|F|07/01/2011|ACTIVE
125|Alex Chan|VA|07/01/2011|ACTIVE
126|Rob Kreb|VA|TERMINATED|06/20/2011
如您所见,结果只是一个客户记录列表,而最后两个字段指示成员是活跃还是终止以及关联的活跃/终止日期。
现在的复杂情况是,正如您对于 ID 为 124 的成员 (Mary Haque) 所见,她有两条记录,而对于这种有两条记录的客户,我只想保留该成员处于活动状态的行,而完全无视她终止的历史。因此,例如,上述所需的输出应该是:
123|John Williams|IL|M|06/01/2011|ACTIVE
124|Mary Haque|NY|F|07/01/2011|ACTIVE
125|Alex Chan|VA|07/01/2011|ACTIVE
126|Rob Kreb|VA|TERMINATED|06/20/2011
如您所见,Mary Haque 现在只有她关于结果的活动信息。上面的结果是由 SQL“选择”查询生成的,但我不能简单地将“WHERE status=ACTIVE”附加到这个查询,因为我仍然想保留像上面的 Rob Kreb 这样只有一条记录的成员,即使他被终止。我只希望在某个成员有两条记录时对 TERMINATED 成员记录进行过滤。
仅供参考,我当前的查询如下所示:
SELECT * FROM customer_change WHERE CUSTOMER_LOGIN NOT IN(SELECT CUSTOMER_LOGIN FROM customer_full WHERE CUSTOMER_LOGIN IS NOT NULL)
UNION
SELECT * FROM customer_change WHERE CUSTOMER_POINTS=0 AND CUSTOMER_LOGIN NOT IN(SELECT CUSTOMER_LOGIN FROM customer_full WHERE CUSTOMER_POINTS=0 AND CUSTOMER_LOGIN IS NOT NULL)
提前感谢您的帮助!
【问题讨论】:
-
为什么将日期存储为字符串而不是日期?
-
请修正标题以匹配您的问题。
-
@jeffrey - 这是关于
UNION的非常荒谬的声明。它有一个地方。 -
@Robert:架构在哪里?我很难理解你为什么也在那里使用工会。
-
以及为什么
TERMINATED和ACTIVE出现在两个不同的字段中,并与日期混合在一起。