【发布时间】:2026-01-18 11:00:02
【问题描述】:
我有两个sql表
declare @events table (id int, [event date] date)
和
declare @ranges table (id int, [start date] date, [end date] date)
我正在尝试使用以下查询将事件与范围匹配
select
e.id as eid, r.id as rid
from
@events as e
inner join
@ranges as r on (e.[event date] between r.[start date] and r.[end date]);
我遇到的问题是,如果事件日期是一个事件的结束日期和另一个事件的开始日期,它将在查询结果中显示两次。该事件应仅匹配一个事件。例如
insert into @events values(1, '2014-01-02'); --date falls on end date on one event and start date of another event
insert into @ranges values(2, '2014-01-01','2014-01-02'),(3,'2014-01-02','2014-01-04');`
我得到以下结果
eid | rid
1 2
1 3
如何让它只匹配一个范围而忽略另一个(最好匹配较早的日期范围)?
【问题讨论】:
-
一个便宜的修复方法是 Select distinct * from .......
-
@happs 仍然返回相同的结果
标签: sql