2010-08-19 4 views
1

J'ai besoin de créer une nouvelle colonne de données, en attribuant un nouveau numéro toutes les 15 minutes dans mes données. Il y a environ 40 000 poubelles de 15 minutes à assigner ... Voici ce que j'ai jusqu'ici.Comment combiner 40000 requêtes de mise à jour en une?

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#); 

Et les bacs de temps iraient jusqu'à 40 000.

Des idées?

+0

Si je comprends bien, vous voulez attribuer à chaque intervalle de 15 minutes un numéro unique. Est-ce correct? –

+0

Oui, c'est vrai. – Vezzerina

+0

La seule chose est qu'il y aura plusieurs points dada avec la même valeur de bin de temps de quinze minutes (ce que je veux). Donc, si j'ai, disons, 18 points de données entre 8h45 et 9h15, ils seront tous affectés au numéro 1, puis tous les points de données entre 9h15 et 9h30 sont affectés numéro 2, etc. – Vezzerina

Répondre

1

OK, voici comment je l'ai fait enfin!

J'ai converti la date/heure en calendrier julien en utilisant CVDate() et fait qu'une nouvelle colonne. J'ai ensuite converti en utilisant [Julian date/heure]/(15/(60 * 24)) pour calculer le nombre de bacs de 15 minutes que j'avais dans une autre colonne, puis j'ai appelé ma première date/heure 0 et compté quinze minutes bacs en entiers en faisant

Int ([15 intervalles de temps de minute]) -3711251

où 3.711.251 est le premier entier de 15 minutes avant mon heure de départ réelle.

J'espère que cela a du sens ...

Je suis ravi d'avoir résolu ce et ne voulait pas quitter ce fil sans dire merci.

3

Essayez de tourner la valeur [Groupers final no summer].[DateTimeEDT] en secondes depuis le temps de démarrage, vous pouvez:

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

Cette requête calcule le bac de temps en fonction de l'intervalle de temps de 15 min. Il utilise TIMESTAMPDIFF pour renvoyer le nombre de secondes entre les deux horodatages. Si vous n'utilisez pas mysql, votre rdbms a probablement quelque chose d'équivalent, par exemple, SQL Server a 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 

Avant d'exécuter la requête de mise à jour, vous pouvez essayer cela comme une requête de sélection, afin de vérifier les résultats sont corrects:

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

OK, Je vais essayer ça. J'utilise Microsoft Access SQL – Vezzerina

+0

Access prend en charge DateDiff. http://www.techonthenet.com/access/functions/date/datediff.php – mdma

Questions connexes