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'
我正在尝试编写一个查询,其中 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'