不包括SQL月份同月内的结果

时间:2019-07-07 01:06:33

标签: sql

我有两个表-一个,history表,其中包含某种条目的日志,另一个(称为flags),其中包含有关标志的列(对于某个帐户) )。这两个表都包含帐户ID。

我想编写一个查询,如果帐户ID在flag表中(例如,在{{1中)没有该月的条目,则仅从history表中提取行。 }}表中,于2019年4月2日输入了一个条目,在flag表中,该帐户已于2019年4月1日记录了该条目。结果是,不应拉起4月2日的条目)

我现在有一个查询,基本上看起来像这样:

history

这就是我被困住的地方。对于子查询,我基本上希望获得两个表中的日期都匹配(相同的月份和年份)的匹配项,并与SELECT *multiple column names* FROM flags WHERE NOT EXISTS (SELECT acc_id FROM history WHERE ...) 一起排除WHERE NOT EXISTS在子查询中找到的结果(本质上,我只想要条目的日期不是同一个月的结果)

最重要的列是:

  • 帐户ID(用于将每个日志条目正确关联到正确的帐户)
  • 日期(仅获取历史记录表中尚未记录所记录月份的行)

我最初使用flag,但这仅提取日期的月份。我需要用它来匹配月份和年份,因为历史记录表包含了几年的数据。

任何帮助将不胜感激!预先谢谢你!

1 个答案:

答案 0 :(得分:0)

SELECT *multiple column names* 
FROM flags 
WHERE NOT EXISTS (
  SELECT 1 
  FROM history 
  WHERE history.acc_id=flags.acc_id
   AND date_trunc('month', history.date) =
             date_trunc('month', flags.date)
)

date_trunc函数将适用于postgres,后者最初是标签之一。如果您不使用postgres,则数据库中可能会有类似的功能,您可以将日期格式化为仅Year-month,然后比较结果字符串。