从 SQL 中的 2 个表中过滤数据

时间:2021-07-30 15:19:56

标签: sql sql-server

我有两张桌子。

表 1:

table1Id,

一些字段....

表 2:

table2Id,

table1Id,

ValidTill(日期时间),

一些字段...

有两个概念,活动记录和非活动记录。

非活动记录 = Table1 中位于 Table2ValidTill 日期比今天晚的记录。

活动记录 = Table1Table2 日期比今天多 ValidTill 的记录。 table1IdTable2 中是否存在多个 ValidTill < today's date 无关紧要,如果 Table2Validtill > 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())并且仍然处于非活动记录之下。

需要更好地查询非活动记录以避免出现活动记录。

提前致谢。

1 个答案:

答案 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 大于当前日期 - 它处于活动状态,否则处于非活动状态。

相关问题