我有两张桌子。
表 1:
table1Id,
一些字段....
表 2:
table2Id,
table1Id,
ValidTill(日期时间),
一些字段...
有两个概念,活动记录和非活动记录。
非活动记录 = Table1
中位于 Table2
且 ValidTill
日期比今天晚的记录。
活动记录 = Table1
中 Table2
日期比今天多 ValidTill
的记录。 table1Id
的 Table2
中是否存在多个 ValidTill < today's date
无关紧要,如果 Table2
的 Validtill > today's date
中至少存在一条记录,则将考虑该记录活动记录,不应归入非活动记录。
查询:
活动:
Select * from Table1 where table1Id in (Select table1Id from Table2 where ValidTill > GETDATE())
非活动:
Select * from Table1 where table1Id in (Select table1Id from Table2 where ValidTill < GETDATE())
通过这两个查询,我得到了一些活跃的记录(可能有这样的记录 validTill < GETDATE()
但至少有一个记录带有 ValidTill > GETDATE()
)并且仍然处于非活动记录之下。
需要更好地查询非活动记录以避免出现活动记录。
提前致谢。
答案 0 :(得分:1)
为了获得活动记录使用查询:
select * from table1
where table1Id in (
select table1Id from Table2
group by table1Id
having max(ValidTill) >= getdate()
) a
为了获得非活动记录使用查询:
select * from table1
where table1Id in (
select table1Id from Table2
group by table1Id
having max(ValidTill) < getdate()
) a
基本上的想法是您按 table1Id
分组并获取该 ID 的最大日期(最新的),然后如果该最大 ID 大于当前日期 - 它处于活动状态,否则处于非活动状态。