SQL Select 仅当月的记录

SQL Select Records From Current Month Only

我正在尝试编写一个查询,其中 returns 记录在特定日期范围内仅存在一次。此 table 中可以有多个具有不同日期的相同记录。例如:

Field |   Date
------------------
  A   | 2016-04-01
  A   | 2017-06-01
  A   | 2018-06-01
  B   | 2017-06-01
  B   | 2018-06-01
  C   | 2018-06-01

在这个例子中,我只想查询 return 行:

Field |   Date
------------------
  C   | 2018-06-01

因为没有其他字段值为 'C' 的行具有更早的日期。我不能简单地在 table 中查询大于某个值的日期,因为可能存在符合该条件但具有与先前日期值相同的记录的记录。我只想 return 只存在一次的记录。这是一个 DB2 table,这个查询最终将被构建到一个 SQLRPGLE 程序中。

有人对执行此操作的最佳方法有任何建议吗?

谢谢!

select * 来自 table x 其中月份(x.date)=月份(当前日期) 和年(x.date)=年(当前日期);

您可以按 Field 分组,并获取那些只出现一次的字段。这里我取 max(Date) 因为我不想按它分组。由于这是组中唯一的日期,max() 函数 returns 日期本身。

declare @from_date date = '20180101', @to_date date = '20180201'

select Field
       max(Date) Date
from   my_table
where  Date between @from_date and @to_date
group by Field
having count(Date) = 1

编辑:@from_date 和@to_date 被设置为日期时间类型,将其设置为日期。谢谢@Clockwork-Muse!

在内部查询中使用分组依据:

SELECT * 
FROM MY_TABLE 
WHERE field 
IN 
    (SELECT field FROM MY_TABLE GROUP BY field HAVING COUNT(*)=1) 
    AND date_ts >= '2016-01-01' 
    AND date_ts < '2019-01-01'