我正在尝试编写一个查询,该查询返回在特定日期范围内仅存在一次的记录。该表中可能有多个相同的记录,但记录的日期不同。例如:
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程序中。
有人对执行此操作的最佳方法有任何建议吗?
谢谢!
答案 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(当前日期);