Je transfère des requêtes depuis Access to T-SQL et ceux qui ont écrit les requêtes ont utilisé la fonction d'agrégation Avg sur les colonnes datetime. Ceci n'est pas supporté par T-SQL et je peux comprendre pourquoi - cela n'a pas de sens. Qu'est-ce qui est en moyenne? Donc, j'étais sur le point de commencer le reverse engineering de ce qu'Access fait quand il agrège datetime en utilisant Avg, mais je pensais que je lancerais la question ici d'abord.Moyenne sur la date et l'heure dans Access
Répondre
J'imagine qu'Access fait la moyenne de la représentation numérique des dates. Vous pouvez faire la même dans le T-SQL avec les éléments suivants ...
select AverageDate = cast(avg(cast(MyDateColumn as decimal(20, 10))) as datetime)
from MyTable
Je suis plus familier avec SGBD non-MS, mais ... Puisque vous ne pouvez pas ajouter deux valeurs DATETIME, vous ne pouvez pas la moyenne ordinaire. Cependant, vous pourriez faire quelque chose de similaire à:
SELECT AVG(datetime_column - TIMESTAMP '2000-01-01 00:00:00.000000') +
TIMESTAMP '2000-01-01 00:00:00.000000'
FROM table_containing_datetime_column;
Ce calcule l'intervalle moyen entre le début de 2000 et les valeurs datetime réelles, et ajoute ensuite cet intervalle au début de l'année 2000. Le choix du « début de 2000 est arbitraire; Tant que le datetime soustrait dans la fonction AVG() est ajouté, vous obtenez une réponse sensée.
Cela suppose que le SGBD utilisé prend en charge la notation SQL «timestamp» standard et prend en charge les types INTERVAL de manière appropriée. La différence entre deux valeurs DATETIME ou TIMESTAMP devrait être un INTERVAL (en fait, INTERVAL DAY (9) à SECOND (6), pour être modérément précis, bien que le '9' soit quelque peu discutable).
Lorsqu'elles sont correctement mutilée pour le SGBD je travaille, l'expression 'œuvres':
CREATE TEMP TABLE table_containing_datetime_column
(
datetime_column DATETIME YEAR TO FRACTION(5) NOT NULL
);
INSERT INTO table_containing_datetime_column VALUES('2008-11-19 12:12:12.00000');
INSERT INTO table_containing_datetime_column VALUES('2008-11-19 22:22:22.00000');
SELECT AVG(datetime_column - DATETIME(2000-01-01 00:00:00.00000) YEAR TO FRACTION(5)) +
DATETIME(2000-01-01 00:00:00.00000) YEAR TO FRACTION(5)
FROM table_containing_datetime_column;
Réponse:
2008-11-19 17:17:17.00000
@ David W. Fenton: « Un champ de date Jet est un entier valeur pour le jour plus une valeur décimale pour le temps "- non, une colonne ACE/Jet DATETIME
est un FLOAT
(synonymes DOUBLE
, FLOAT8
, IEEEDOUBLE
, NUMBER
) avec des limites par exemple la valeur maximale DATETIME
est # 9999-12-31: 23: 59: 59 # bien que la valeur maximale FLOAT
pouvant être convertie en DATETIME
soit un peu plus grande, par ex.
SELECT CDBL(CDATE('9999-12-31 23:59:59'))
retours 2958465.99998843, cependant
SELECT CDATE(CDBL(2958465.9999999997))
ne pas d'erreur, alors que
SELECT CDATE(CDBL(2958465.9999999998))
Est-ce erreur. Par conséquent, pour préserver les fonctionnalités de SQL Server, je suggère de convertir la colonne DATETIME
en FLOAT
par exemple.
SELECT CAST(AVG(CAST(MyDateTimeColumn AS FLOAT)) AS DATETIME)
from MyTable
- 1. Date de conversion dans SQLServer et Access
- 2. Conversion d'une chaîne en date dans Access
- 3. MS Access 2003 - Le calcul d'une moyenne basée sur qté vendu/par site avec l'offre%
- 4. Access Report - Semaine de la date de fin
- 5. SQL/MySQL SELECT et moyenne sur certaines valeurs
- 6. Effectuez la somme, la moyenne et la multiplication sur toutes les colonnes d'une table?
- 7. AVAudioRecorder: puissance maximale et moyenne
- 8. Comment obtenir la moyenne et la somme dans ma requête croisée?
- 9. Microsoft Access SQL Date de comparaison
- 10. Obtenir la moyenne en pourcentage
- 11. Agréger la fonction avec Date sur Postgres
- 12. Moyenne pondérée des données sur les ventes
- 13. en boucle et moyenne en C++
- 14. Obtenir une moyenne sur plusieurs collections dans LINQ
- 15. Moyenne pondérée
- 16. Sélection de plages de temps à partir des champs de date et heure dans Access
- 17. provoquant une erreur non publique d'autorisations dans la réflexion sur la confiance moyenne
- 18. Formulaires complexes et scripts dans Access
- 19. Bloc d'application Microsoft Data Access Date type precision
- 20. Date max dans la vue sur la jointure externe gauche
- 21. Requête TSQL qui me renvoie la première date et la dernière date dans une table
- 22. Expressions de cas dans Access
- 23. ComboBox modifiable et modifiable (?) Dans MS Access
- 24. Publication basée sur la date ASP.NET MVC
- 25. Étant donné une date, comment obtenir la date suivante et précédente dans la base de données
- 26. différence étrange entre new Date() et la date de FileCreation
- 27. Convertir la date dans TSQL
- 28. Pivotant dans T-SQL basé sur la date de décalage
- 29. Pagination des vues génériques basées sur la date dans Django
- 30. Filtrer sur la date du jour dans Castor OQL
Oui, c'est ce que j'ai supposé et c'est probablement la chose la plus logique. Je me demandais si ce n'était peut-être pas une sorte de partitionnement comme le temps moyen de la journée ou quelque chose comme ça. –
Un champ de date Jet est un nombre entier pour le jour plus une valeur décimale pour l'heure. Si vous voulez faire la moyenne uniquement sur les dates, utilisez la valeur entière. –
MS SQL est similaire - casting vers int vous donnera seulement la moyenne de la partie date –