我有一个带有电话的临时表,需要根据日志表进行检查。
温度表
- 电话 varchar(20)
日志表
- 电话 varchar(20)
- [状态] varchar(20)
- 更改日期日期时间
日志表数据
- 日志表中的每部电话将始终具有“已添加”状态
- 但并不是每部手机都会有“已移除”的状态
例子:
电话状态更改日期
3054444444 添加于 2012 年 10 月 12 日
- 4445556666 添加于 2012 年 10 月 12 日
- 3054444444 已删除 2012 年 11 月 12 日
Where 子句有 2 个部分,它们都必须为真
1. Temp.Phone可以在以下情况下加入:
- @Date 大于或等于 log.ChangeDate
- log.Status = '添加'
这是棘手的部分....我无法弄清楚
2. Join 还需要确保:
- @Date 小于 log.ChangeDate
- 当 log.Status = 'removed'
- log.Status = 'removed' 可能不存在,所以我需要检查它是否存在然后它是真的,如果不存在,那么忽略或以某种方式生成一个真
SQL 语句
SELECT *
FROM #temp t
JOIN log l
ON t.Phone = l.Phone
WHERE (l.ChangeDate < = @Date AND l.Status = 'Added')
AND
(l.ChangeDate > @Date AND l.Status = 'Removed') --may not exist, but ALSO has to be true