【问题标题】:How to use a column as a condition. Postgresql如何使用列作为条件。 PostgreSQL
【发布时间】:2020-05-03 11:32:00
【问题描述】:

我想通过使用以前应用于同一列的条件来减少列。我使用的条件是日期(在 current_date - 间隔('1 个月')和 current_date 之间)。我要查找的列是 id,以便查看在一段时间内使用应用程序的人的 id,然后将此 id 从整体 id 列中取出。这将显示上个月未使用该应用的人的 ID。

with t as(
          select id as active_id
          from table1
          where last_interaction between current_date - interval '1 month' and current_date
          group by id)

select id
from table1 
join t
on t.active_id = table1.id
where table1.id != t.active_id

【问题讨论】:

  • 很难从一个英文句子和一个部分 SQL 查询中理解你想要什么。请提供示例数据和预期结果,以阐明您想要实现的目标。
  • 样本数据和期望的结果可能会让您对您正在尝试做的事情有所了解。
  • 添加一些示例表数据和预期结果。 (请格式化文本。没有图像。)
  • 我们能给依依举个例子吗?
  • 我使用的条件是日期(在 current_date - 间隔('1 个月')和 current_date 之间)。我要查找的列是 id,以便查看在一段时间内使用应用程序的人的 id,然后将此 id 从整体 id 列中取出。这将显示上个月未使用该应用的人的 ID。

标签: sql postgresql


【解决方案1】:

我将您正在查找的内容称为“查找不匹配”查询。您想查找表中与另一个查询的结果不匹配的所有内容。为此,您需要在主表和“过滤表”之间进行 LEFT JOIN。这将在匹配时将 t.xy 的值放在 t.xy 列中,并且在不匹配时将 NULL 放在 t.xy 中。

从那里,您只想要一个 WHERE t.xy IS NULL,这样您就只能返回没有 t.xy 的 t.x。

with t as(
          select x as xy
          from table1
          where x between current_date - interval '1 month' and current_date
          group by x)

select x
from table1 
LEFT join t
on t.xy = table1.x
where t.xy IS NULL

我还修正了一个错字,您使用 table.x 而不是 table1.x

【讨论】:

  • 非常感谢。 “哪里 t.xy IS NULL”是我一直在寻找的。​​span>
猜你喜欢
  • 1970-01-01
  • 2019-12-15
  • 2021-02-11
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
相关资源
最近更新 更多