2010-08-19 4 views
1

Мне нужно создать новый столбец данных, назначая каждые 15 минут в моих данных новый номер. Есть около 40 000 15-минутных временных ящиков, которые нужно назначить ... Вот что я до сих пор.Как объединить 40000 запросов обновления в один?

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.

Любые идеи?

+0

Если я правильно понимаю, вы хотите назначить каждый 15-минутный интервал уникальным номером. Это правильно? –

+0

Да, это так. – Vezzerina

+0

Единственное, что будет несколько точек дада с тем же пятнадцатиминутным значением бина времени (что я и хочу). Так что, если у меня есть, скажем, 18 точек данных между 8:45 и 9:15, всем им будет присвоено число 1, тогда любые точки данных между 9:15 и 9:30 присваиваются номер 2 и т. Д. – Vezzerina

ответ

1

ОК, вот как я, наконец, сделал это!

Я преобразовал календарь Date/Time to Julian с помощью CVDate() и создал новый столбец. Затем я преобразовал, используя [Julian date/time]/(15/(60 * 24)), чтобы вычислить количество 15-минутных ящиков времени, которые у меня были в другом столбце, а затем вызвал мою первую дату/время 0 и подсчитал пятнадцать минут в целых числах, делая

Int ([15-минутные интервалы времени] -3711251)

где 3711251 является первым 15-минутным целым числом до моего фактического времени начала.

Я надеюсь, что это имеет смысл ...

Я очень рад, что решил это и не хотел оставить эту тему, не говоря спасибо.

3

Попробуйте включить значение в [Groupers final no summer].[DateTimeEDT] в секундах с момента запуска, то вы можете:

UPDATE [Groupers final no summer] 
SET [Groupers final no summer].[Fifteen min time bin daily] = timeInSeconds/(15*60) 
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 
+0

OK, Я попробую это. Я использую Microsoft Access SQL – Vezzerina

+0

Доступ поддерживает DateDiff. http://www.techonthenet.com/access/functions/date/datediff.php – mdma

Смежные вопросы