【问题标题】:Filter data from 2 tables in SQL从 SQL 中的 2 个表中过滤数据
【发布时间】:2021-08-01 16:43:57
【问题描述】:

我有两张桌子。

表 1:

table1Id,

一些领域....

表 2:

table2Id,

table1Id,

ValidTill(日期时间),

一些领域...

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

非活动记录 = 来自Table1 的记录,这些记录位于Table2 中,且ValidTill 的日期早于今天。

活动记录 = 来自Table1 的记录在Table2 中,ValidTill 的日期比今天多。如果Table2ValidTill < today's date 中存在这样多个table1Id 无关紧要,如果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 &lt; GETDATE(),但至少有一条记录为ValidTill &gt; GETDATE())并且仍然处于非活动记录之下。

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

提前致谢。

【问题讨论】:

  • 嗨@Dinav Ahire,请提供示例数据或预期输出。

标签: sql sql-server


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多