Accueil > Forum > > > > UNION , ORDER BY et TOP qui ne fonctionne pas toujours et jamais en VBscript / ADODB.Recordset
UNION , ORDER BY et TOP qui ne fonctionne pas toujours et jamais en VBscript / ADODB.Recordset
vendredi 3 décembre 2010 à 17:22:28 |
UNION , ORDER BY et TOP qui ne fonctionne pas toujours et jamais en VBscript / ADODB.Recordset

Egalon
|
Bonsoir à tous,
vous allez voir, c'est drôle...
j'effectue une requete pour obtenir la date la plus récente (sur Mgnt Studio de SQL server 2008) dans différentes tables similaires:
SELECT TOP 1 Change_DateTime, Change_Milli FROM Table1 ORDER BY Change_DateTime DESC , Change_Milli DESC
Toutefois, UNION entre mes requetes sont pas acceptées à cause de mes ORDER BY à chaque sous-requete, ce que je trouve anormal:
SELECT TOP 1 Change_DateTime, Change_Milli FROM Table1 ORDER BY Change_DateTime DESC , Change_Milli DESC UNION
SELECT TOP 1 ,Change_DateTime, Change_Milli FROM Table2 ORDER BY Change_DateTime DESC , Change_Milli DESC
mais si je les imbrique dans un autre SELECT, ca passe:
SELECT * FROM (
SELECT TOP 1 Change_DateTime, Change_Milli FROM Table1 ORDER BY Change_DateTime DESC , Change_Milli DESC UNION
SELECT TOP 1 Change_DateTime, Change_Milli FROM Table2 ORDER BY Change_DateTime DESC , Change_Milli DESC UNION
SELECT TOP 1 Change_DateTime, Change_Milli FROM Table3 ORDER BY Change_DateTime DESC , Change_Milli DESC UNION
SELECT TOP 1 Change_DateTime, Change_Milli FROM Table4_Alarms ORDER BY Change_DateTime DESC , Change_Milli DESC UNION
SELECT TOP 1 Change_DateTime, Change_Milli FROM Table5 ORDER BY Change_DateTime DESC , Change_Milli DESC
)AS TopDates ORDER BY Change_DateTime DESC , Change_Milli DESC
Ce qui est le but recherché.
Je peux obtenir un résultat similaire avec une requete plus conventionnelle, unir les tables et sortir l'enregistrement le plus récent. Mais ca ne va pas aussi vite:
SELECT * FROM (
SELECT Change_DateTime, Change_Milli FROM Table1 UNION
SELECT Change_DateTime, Change_Milli FROM Table2 UNION
SELECT Change_DateTime, Change_Milli FROM Table3 UNION
SELECT Change_DateTime, Change_Milli FROM Table4 UNION
SELECT Change_DateTime, Change_Milli FROM Table5
)AS TopDates ORDER BY Change_DateTime DESC , Change_Milli DESC
Et comme le titre l'indique, aucune des 2 propositions ne fonctionne en Vbscript avec ADODB.RecordSet, résultat : recordCount = -1.
C'est marrant au début mais au bout d'1h30 je rigole moins...
Pour une éventuelle solution, mes contraintes sont: je garde des tables séparées, j'utilise VBS et j'évite les traitements sur les dates dans VBS car une conversion s'impose. Et si y en a pas, j'aurai servi au moins d'avertisseur sur ce problème.
Cdt,
|
|
samedi 4 décembre 2010 à 17:22:20 |
Re : UNION , ORDER BY et TOP qui ne fonctionne pas toujours et jamais en VBscript / ADODB.Recordset

Robert33
|
Bonjour
Ha oui, ce bon vieux probleme des ORDER BY dans les unions...
en fait ça parait un peu normal, que le tri soit fait après l'union, mais c'est vrai que dans certains cas ça enerve un peu
dans ton cas, passe par une clause MAX,
et sans doute un UNION ALL au cas ou il y ait des valeurs identiques dans les differentes tables
Code sql :
SELECT MAX(Change_Milli) AS Change_Milli, MAX(Change_DateTime) AS Change_DateTime FROM Table1
UNION ALL
SELECT MAX(Change_Milli) AS Change_Milli, MAX(Change_DateTime) AS Change_DateTime FROM Table2
UNION ALL
SELECT MAX(Change_Milli) AS Change_Milli, MAX(Change_DateTime) AS Change_DateTime FROM Table3
Bob.
|
|
dimanche 5 décembre 2010 à 12:28:09 |
Re : UNION , ORDER BY et TOP qui ne fonctionne pas toujours et jamais en VBscript / ADODB.Recordset

Egalon
|
Bonjour,
merci, je ne connaissais pas la particularité UNION ALL.
Toutefois, si j'aggrège par un MAX, je pense retrouver le maximum, donc la date la plus récente d'une part et d'autre part la valeur de millisecondes la plus élevée et non le couple dateTime + Millisecond le plus récent.
D'autre part, UNION ALL existe sur toutes les plates formes SQL?
Par ailleurs, un SELECT MAX doit certainement être infiniment plus rapide qu'un SELECT TOP 1 / ORDER BY.
Je repars sur cette piste Lundi au boulot.
Merci!
|
|
lundi 6 décembre 2010 à 11:11:22 |
Re : UNION , ORDER BY et TOP qui ne fonctionne pas toujours et jamais en VBscript / ADODB.Recordset

Egalon
|
La solution théorique pourrait être quelque chose comme:
Code sql : SELECT TOP 1 App_DateTime as R1,MAX(App_Milli) as R2 FROM (
Select App_DateTime, App_Milli FROM _Appli_Export_DEBIT_Export_Alarms
UNION ALL Select App_DateTime, App_Milli FROM _Appli_Export_EVT_Export_Alarms
UNION ALL Select App_DateTime, App_Milli FROM _Appli_Export_Motors_Export_Alarms
UNION ALL Select App_DateTime, App_Milli FROM _Appli_Export_Valve_Export_Alarms
UNION ALL Select App_DateTime, App_Milli FROM _Appli_histo_evt
) AS T1
WHERE T1.App_DateTime = (
Select MAX(App_DateTime) FROM
(
Select MAX(App_DateTime) as App_DateTime FROM _Appli_Export_DEBIT_Export_Alarms
UNION ALL Select MAX(App_DateTime) as App_DateTime FROM _Appli_Export_EVT_Export_Alarms
UNION ALL Select MAX(App_DateTime) as App_DateTime FROM _Appli_Export_Motors_Export_Alarms
UNION ALL Select MAX(App_DateTime) as App_DateTime FROM _Appli_Export_Valve_Export_Alarms
UNION ALL Select MAX(App_DateTime) as App_DateTime FROM _Appli_histo_evt
) As T2
WHERE App_DateTime Is Not Null
)
GROUP BY T1.App_DateTime ORDER BY T1.App_DateTime DESC
Toutefois, un ADO recordSet ne sait pas faire ça dans VBS:
Code sql :
Select MAX(App_DateTime) as App_DateTime FROM _Appli_Export_DEBIT_Export_Alarms
UNION ALL Select MAX(App_DateTime) as App_DateTime FROM _Appli_Export_EVT_Export_Alarms
UNION ALL Select MAX(App_DateTime) as App_DateTime FROM _Appli_Export_Motors_Export_Alarms
UNION ALL Select MAX(App_DateTime) as App_DateTime FROM _Appli_Export_Valve_Export_Alarms
UNION ALL Select MAX(App_DateTime) as App_DateTime FROM _Appli_histo_evt
je vais donc décomposer en plusieurs requêtes  .
Merci encore à Bob.
|
|
mardi 7 décembre 2010 à 21:49:46 |
Re : UNION , ORDER BY et TOP qui ne fonctionne pas toujours et jamais en VBscript / ADODB.Recordset

aieeeuuuuu
|
Réponse acceptée !
Bonjour
avez vous trouvé votre solution ?
vous dites "recordCount = -1"... avez-vous quand meme tenté de récupérer au moins le premier tuple du recordset ou verifié par un autre moyen que recordCount si le recordset etait vraiment vide ?
J'ai un vague souvenir d'un recordCount qui ne donnait la bonne valeur... qu'après qu'on avait defilé la totalité du recordset...
Juste une piste a tester...
|
|
mercredi 8 décembre 2010 à 10:32:58 |
Re : UNION , ORDER BY et TOP qui ne fonctionne pas toujours et jamais en VBscript / ADODB.Recordset

Egalon
|
Bonjour,
effectivement, c'est pas parce que le recordCount = -1 que le résultat est vide...
Je peux refaire de grosses requetes pour obtenir un résultat précis.
merci bien. 
|
|
Cette discussion est classée dans : change, datetime, color, desc, milli
Répondre à ce message
Sujets en rapport avec ce message
DATETIME SQL SERVER AU SECOURS !!!!!! [ par MACHOMAN ]
bonjour, j'ai plusieurs pb avec les datetime sous sql server : 1 - j'ai deux champs datetime, dans le premier il y a une date dans le second une heure
Classement DESC ou ASC de colones [ par christobal ]
Bonjour, pour etre + clair quand le visiteur est sur la page des offres il a devant lui un tableau j'aimerais qu'il puisse faire (comme sur d'autre si
Aide en SQLServer2000 [ par sergiodonini ]
Bonjour les amis, Je developpe une application Web en Arabe dynamique avec ASP et SQLServer2000, mon probleme est le suivant:J'ecris dans les champs d
VB.net 2005 et SQL 2005 Express : Prbl DateTime [ par morleys ]
Bonjour à vous tous,Je coince voilà quelque temps sur un probleme d'enregistrement de date SQL 2005.Si j'ai toto = Cdate(Now()) Pour info toto
test si string (datetime) est correct. [ par tmcuh ]
Voilà un big soucis avec SQL. Je récupère une donnée de type char[10] provenant d'une table (qui ne m'appartient pas) et je dois tester à l'interrieur
dates qui plantent tout !! [ par chamallow ]
Bonjour,Alors voilà, j'utilise une base SQL SERVER. Pour me rassurer, il n'existe pas de type date pour ce type de base non? (J'utilise datetime, parc
problème concaténation [ par chamallow ]
Bonjour,J'ai un petit problème avec une concaténation. C'est tout bête mais bon.SELECT CAST("1/1/" + CAST(annee AS CHAR(4)) AS DATETIME)from maTableSq
Perte connexion MySQL si change date systeme [ par globule ]
Bonjour, J'ai fait un programme en VB qui utilise des bases MySQL (en local ou sur un réseau) J'ai installé MySQL essential pour
sql server 2000 + probleme de datetime ! [ par jimmy69 ]
Bonjour,Dans une db sous sql server 2000 on a une table qui utilise une colonne de type datetime.J'aimerais savoir quelle est la query SQL à utiliser
Vérification de créneaux de réservation [ par walterskinner ]
<span style="FONT-SIZE: 10pt; COLOR:
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : ORACLE FORMSRE : ORACLE FORMS par csmahicham
Cliquez pour lire la suite par csmahicham
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|