SQL仅从当前月份选择记录

时间:2018-06-20 15:57:12

标签: sql db2 ibm-midrange

我正在尝试编写一个查询,该查询返回在特定日期范围内仅存在一次的记录。该表中可能有多个相同的记录,但记录的日期不同。例如:

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

在此示例中,我只想让查询返回该行:

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

因为没有其他字段的字段值“ C”具有较早的日期。我不能简单地查询表中大于某个值的日期,因为可能存在符合该条件的记录,但具有与先前日期值相同的记录。我只想返回只存在一次的记录。这是一个DB2表,该查询最终将内置到SQLRPGLE程序中。

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

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以按Field分组,并获取仅出现一次的字段。在这里我使用max(Date)是因为我不想按其分组。由于它是组中唯一的日期,因此max()函数将返回日期本身。

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设置为datetime类型,而是将其设置为date。谢谢@ Clockwork-Muse!

答案 1 :(得分:1)

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

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'

答案 2 :(得分:0)

选择* 从表x 其中month(x.date)= month(当前日期) 和year(x.date)= year(当前日期);