如何将40000个更新查询合并为一个?

时间:2010-08-19 15:12:11

标签: sql ms-access

我需要创建一个新的数据列,在我的数据中每15分钟分配一个新数字。大约有40,000个15分钟的时间箱被分配......这是我到目前为止所拥有的。

UPDATE [Groupers final no summer] 
SET [Groupers final no summer].[Fifteen min time bin daily] ='1',
WHEN [Groupers final no summer].[DateTimeEDT]=Between #11/02/05 08:45:01# 
     and #11/02/05 09:00:00#) 
OR 
SET [Groupers final no summer].[Fifteen min time bin daily] ='2', 
WHEN [Groupers final no summer].[DateTimeEDT]=Between #11/02/05 09:00:01# 
    and #11/02/05 09:15:00#);

时间箱会达到40,000。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

尝试将[Groupers final no summer].[DateTimeEDT]中的值设置为自开始时间以来的秒数,然后您可以:

UPDATE [Groupers final no summer]
SET [Groupers final no summer].[Fifteen min time bin daily] = timeInSeconds / (15*60)

答案 1 :(得分:1)

好的,这就是我最终做到的!

我使用CVDate()将日期/时间转换为儒略历,并将其作为新列。然后我使用[朱利安日期/时间] /(15 /(60 * 24))转换来计算我在另一列中的15分钟时间段的数量,然后调用我的第一个日期/时间0并计算十五分钟时间箱在整数中做

Int([15分钟时间间隔] -3711251)

其中3711251是我实际开始时间之前的第一个15分钟整数。

我希望这是有道理的......

我很高兴能够解决这个问题并且不想在不说谢谢的情况下离开这个主题。

答案 2 :(得分:0)

此查询根据15分钟的时间间隔计算时间仓。它使用TIMESTAMPDIFF返回两个时间戳之间的秒数。如果你没有使用mysql,你的rdbms很可能有相同的东西,例如,SQL Server有DATEDIFF

UPDATE [Groupers final no summer] 
    SET [Groupers final no summer].[Fifteen min time bin daily] =((TIMESTAMPDIFF(SECOND, #11/02/05 08:45:01#, DateTimeEDT)/(15*60))+1

在运行更新查询之前,您可以尝试将其作为选择查询,以验证结果是否正确:

SELECT * FROM [Groupers final no summer], 
((TIMESTAMPDIFF(SECOND, #11/02/05 08:45:01#, DateTimeEDT)/(15*60))+1 AS TimeBin