【发布时间】:2011-11-10 17:38:43
【问题描述】:
所以,我有一些具有开始日期和结束日期的历史记录表。问题是,该表中有几条记录指向同一事物,但它们的开始日期和结束日期并不准确。所以,我正在尝试统一他们的开始和结束日期。
因此,每组记录的开始日期和结束日期都很接近(大约 7 秒内)。然后会有另一个集群,具有相同的键(在本例中为 VoyageID),但有一组不同的关闭开始日期和结束日期。那有意义吗?如果没有,我可以发布一些示例数据。
无论如何,我现在的目标是找到每个集群的最短开始日期。我现在拥有的让我获得了每个 VoyageID 的最低要求。任何帮助,将不胜感激。谢谢!
这是我所拥有的:
DECLARE @7S DATETIME
SET @7S = '0:0:07'
PRINT @7S
SELECT MAX(T1.BeginDate), T1.VoyageID FROM
hist.VoyageProfitLossValues T1 INNER JOIN
hist.VoyageProfitLossValues T2 ON
T1.VoyageID = T2.VoyageID AND
T1.BeginDate BETWEEN (T2.BeginDate - @7S) and (T2.BeginDate + @7S)
GROUP BY T1.VoyageID
编辑:示例数据:
BeginDate EndDate VoyageID
2011-07-05 07:02:50.713 2011-07-05 07:25:53.007 6312
2011-07-05 07:02:50.870 2011-07-05 07:25:53.693 6312
2011-07-05 07:02:51.027 2011-07-05 07:25:54.387 6312
2011-07-08 14:22:21.147 NULL 6312
2011-07-08 14:22:21.163 NULL 6312
2011-07-08 14:22:21.177 NULL 6312
注意:每个航次的真实数据多于3个,BeginDates可以相差更远。
我想摆脱这个:
BeginDate VoyageID
2011-07-05 07:02:50.713 6312
2011-07-08 14:22:21.147 6312
我所拥有的只会给我第一行。
我最终也会使用结束日期来执行此操作,但我可以轻松地将一个转换为另一个。
【问题讨论】:
-
样本数据和预期输出会有所帮助。
-
您是说要
GROUP BY7 秒范围内的日期吗? -
我不确定我有这个。您的列名为 BeginDate,但实际上有一半是结束日期,现在您想将它们配对吗?
-
如果开始日期在范围内,但结束日期超出范围,会发生什么?如果有两组不同的开始,但(实际上)只有一个结束范围呢?
-
我对其进行了编辑,希望使其更清晰。
标签: sql sql-server-2008