Sql 在范围列表中选择日期

Sql 在范围列表中选择日期,sql,tsql,Sql,Tsql,我有一个带有记录的表,每一行包含DATETIME列,该列描述了行何时加载到表中。我有一个CTE,它可以创建如下所示的范围(计数不同) first_day_of_month last_day_of_moth ------------------------------------------------------- 2013-12-01 00:00:00.000 2013-12-31 23:59:59.000 2013-11-

我有一个带有记录的表,每一行包含
DATETIME
列,该列描述了行何时加载到表中。我有一个CTE,它可以创建如下所示的范围(计数不同)

    first_day_of_month             last_day_of_moth
    -------------------------------------------------------
    2013-12-01 00:00:00.000        2013-12-31 23:59:59.000
    2013-11-01 00:00:00.000        2013-12-31 23:59:59.000
    2013-10-01 00:00:00.000        2013-12-31 23:59:59.000
    2013-09-01 00:00:00.000        2013-12-31 23:59:59.000
    2013-08-01 00:00:00.000        2013-12-31 23:59:59.000
问题:现在我想为在CTE中创建的每个范围从第一个表中选择最小的
DATETIME
值。我完全不知道怎么做。欢迎提供任何想法/链接

例如,它应该看起来像:

2013-12-10
2013-11-20
2013-10-05
2013-09-13
2013-08-06
UPD:日期或日期时间-这无关紧要

UPD2:我发现我可以使用以下条件加入我的表:

INNER JOIN source_monthes_dates ON
    (load_timestamp >= first_day_of_month AND load_timestamp <= last_day_of_moth)
内部连接源\u月\u日期

(load_timestamp>=每月第一天和load_timestamp您可以使用此查询,该查询使用
行数()
获取最小值。
范围
是CTE的结果,
表1
是另一个有日期的表

select x.somedate
from
  (select t.somedate,
  ROW_NUMBER() OVER (PARTITION BY r.first_day_of_month, r.last_day_of_moth ORDER BY t.somedate) rownumber
  from ranges r
  inner join table1 t
  on r.first_day_of_month <= t.somedate and r.last_day_of_moth >= t.somedate) x
where x.rownumber = 1

为什么范围重叠?@Szymon这是我的错误。我修复了它。除了保留空值来代替缺少的值之外,还有其他方法吗?例如,如果行_number=1未找到任何值,则将空值置为空。我尝试使用不同的联接类型,但没有任何运气。您可以离开联接范围表和此查询,这将给出y你需要什么。我稍后再谈。很抱歉打扰你,还有一个问题-有没有办法获得第一个月的最后一次加载时间戳(按行数第一次)?使用相同的内部连接内部选择,但按加载时间戳DESC排序没有给我预期的结果。你需要在(…)上更改
行数()中的顺序
。这就是你所做的吗?是的,这是我做的第一件事。但问题在于以下条件:我只想在第一个月的月边界内获得最后日期,因为所有其他条件
x.rownumber=1
都是绝对好的。看来我需要添加一个
选择
inselde
左连接
,顺序相反行编号的r,但我不能加入它。我准备这样的代码:
select ranges.first_day_of_month, ranges.last_day_of_moth, x.somedate
from
  ranges
left join
  (select t.somedate, r.first_day_of_month, r.last_day_of_moth,
  ROW_NUMBER() OVER (PARTITION BY r.first_day_of_month, r.last_day_of_moth ORDER BY t.somedate) rownumber
  from ranges r
  inner join table1 t
  on r.first_day_of_month <= t.somedate and r.last_day_of_moth >= t.somedate) x
on x.first_day_of_month = ranges.first_day_of_month and x.last_day_of_moth = ranges.last_day_of_moth 
where isnull(x.rownumber, 1) = 1