|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Futur Membre du Club
![]() Stéphane BouvetChef de projet MOA Inscription : mai 2011 Messages : 40 ![]() |
Bonjour, c'est encore moi !
Dans ma table de statistiques, il m'est demandé de conserver pour chaque client les 4 liens les plus visités dans mes e-mails. J'ai toujours ma structure statistiques e-mails : Code :
Exemple : EMAIL TYPE THEME TIME ----- ---- ----- ------------------- toto@ Click accueil 2010-12-11 19:30:00 toto@ Click promo 2010-12-12 12:01:00 toto@ Click promo 2010-12-12 12:01:00 toto@ Click faq 2010-12-12 12:02:00 titi@ Click accueil 2010-12-04 09:47:00 titi@ Click accueil 2010-12-19 10:19:00 titi@ Click promo 2010-11-27 15:29:00 titi@ Click faq 2010-11-27 17:25:00 titi@ Click promo 2010-12-12 18:12:00 titi@ Click contact 2010-11-28 15:25:00 Pour le moment à part mettre à jour les thèmes un à un (pour le premier, il me suffit de prendre le MAX, le suivant sera le MAX qui ne correspond pas au thème N°1, le troisième sera le MAX sans les thèmes 1 et 2, etc.), je ne vois pas trop comment faire la mise à jour de mes champs... Alors bien sûr, on me dira qu'il n'est pas convenable de stockeur dans la table de statistiques 4 champs THEME1..4, mais le cahier des charges étant précis sur ce point - et au vue des statistiques actuelles, il y a rarement plus de 3 ou 4 thèmes différents dans nos e-mailings ; en outre je pense au requêtage futur sur cette table SEGMENTATION (un outil qui permettra de sélectionner les clients en fonction de leur préférence, etc.) |
||
|
00
|
|
|
#2 | ||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Citation:
Citation:
En terme d'évolutivité c'est nul, et d'interrogation de la table n'en parlons pas. Mais bon comme visiblement certains de vos collègues font de l'abus d'autorité, on va passer ... Voici une piste : Code :
Donc pour le code qui vous permet de faire cela en une seule requête, ça va pas être de la tarte, étant donné que vous ne pouvez pas déterminer à l'avance la liste des themes qui seront retournés par cette requête. Cela aurait pu nous mener à faire un UNPIVOT (que je déteste). Si la table était au départ correctement implémentée, alors la requête que je vous ai donné fait le travail tranquillement. @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||||
|
00
|
|
|
#3 |
|
Futur Membre du Club
![]() Stéphane BouvetChef de projet MOA Inscription : mai 2011 Messages : 40 ![]() |
Apparemment RANK() n'est pas reconnue sous SQL Server 2000 (j'ai oublié de le préciser) ?
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Héhé oui
Sous cette version, ni l'expression de table commune, ni les fonctions de fenêtrage, ni les opérateurs PIVOT et UNPIVOT n'existent. Laissez-moi revenir vers vous avec une requête qui fonctionnera pour SQL Server 2000. @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#5 |
|
Futur Membre du Club
![]() Stéphane BouvetChef de projet MOA Inscription : mai 2011 Messages : 40 ![]() |
J'adore ce forum, on est servis comme des princes !
|
|
00
|
|
|
#6 | ||
|
Futur Membre du Club
![]() Stéphane BouvetChef de projet MOA Inscription : mai 2011 Messages : 40 ![]() |
Sain-by-noo,
Je reviens vers vous pour m'aider dans la conversion de ce "bouh qu'il est vilain" curseur en belle requête assertionnelle toute propre : Je résume : je parcours ma table qui m'indique par client les liens visités et le nombre de fois où ils ont été visités, puis je veux obtenir le top 4 de mes liens : Code :
Je suis toujours sous SQL SERVER 2000 |
||
|
00
|
|
|
#7 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Désolé de vous avoir oublié.
En fait j'avais écrit la requête suivante, qui fonctionne : Code :
Si j'y parviens je vous fais signe. @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
00
|
|
|
#8 |
|
Futur Membre du Club
![]() Stéphane BouvetChef de projet MOA Inscription : mai 2011 Messages : 40 ![]() |
Il ne manquerait pas dans le S2 une jointure sur l'e-mail ?
En tous cas merci du décorticage de cerveau, tout ça pour une tâche hebdomadaire (en même temps qu'elle tourne 1 h ou 4 h, l'important c'est que les résultats soient juste, hein, un dimanche, ça n'embête personne ! La solution par curseur telle qu'appliquée met 02:50 à tourner. Je vais voir comment appliquer votre solution et les performances obtenues. |
|
00
|
|
|
#9 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Citation:
Ce n'est par exemple pas acceptable pour un hôpital ou une banque, ... Si j'ai une requête de ce type qui prend 1h, je vais regarder comment réduire son temps d'exécution, parce que pendant qu'elle lit les données, elle verrouille des lignes, pages, ... et consomme des ressources qui pourraient être allouées à d'autres traitements. Désolé mais je n'ai jamais aimé le "bwo on s'en fout ça se voit pas" Citation:
La solution la plus rapide pour votre problème, et je crois que cela vous a déjà été proposé, c'est de créer une vue indexée dont la définition est la sous-requête qui définit S1 dans la dernière requête que je vous ai donné. Cela simplifierait la requête tout en la rendant extrêmement performante En revanche le coût de maintenance d'une vue indexée n'est pas à négliger si votre table STATS_EMAIL subit de nombreuses modifications ... @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
00
|
|
|
#10 |
|
Futur Membre du Club
![]() Stéphane BouvetChef de projet MOA Inscription : mai 2011 Messages : 40 ![]() |
...Par contre je ne vois pas trop comment incorporer cette requête dans un ordre de SELECT qui me permettrait au final d'obtenir par rotation les colonnes EMAIL, THEME1, THEME2, THEME3, THEME4...
|
|
00
|
|
|
#11 | |
|
Futur Membre du Club
![]() Stéphane BouvetChef de projet MOA Inscription : mai 2011 Messages : 40 ![]() |
Citation:
Quant à la vue indexée, apparemment elle nécessite un paramétrage particulier au niveau du serveur ? J'en avais touché un mot à mon DBA, je verrai ce qu'il est possible d'obtenir... J'ai effectivement créé une vue (ne serait-ce que pour la lisibilité) Quant à la table de données STATS_EMAIL, elle devrait être alimentée au mieux une fois par jour, au pire une fois par semaine. |
|
|
00
|
|
|
#12 | ||||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Citation:
En revanche ce que je comprend moins, c'est que votre DBA laisse faire cela, parce que c'est sa responsabilité. Citation:
Citation:
Citation:
Citation:
SQL est conçu pour manipuler et interroger des données, tout en garantissant leur intégrité et la plus grande vitesse d'accès possible à celles-ci. Rien de plus, rien de moins ... et c'est déjà énorme ! La seule façon que je vois, c'est de faire une jointure sur l'e-mail ... et faire une jointure sur des chaînes de caractère, c'est méga-moche !
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||||||
|
00
|
|
|
#13 |
|
Futur Membre du Club
![]() Stéphane BouvetChef de projet MOA Inscription : mai 2011 Messages : 40 ![]() |
Par chez nous on en a usé quelques-uns des DBA, avec chacun ses habitudes et surtout un historique lourd sur la DB, du coup il y a je pense une certaine "lassitude" qui s'installe à se dire que le travail de restructuration serait énorme, voire hénaurme, et surtout qu'au-dessus de tout cela il y a les applicatifs qui eux sont sous ma responsabilité, mais ont aussi du vécu...
Et puis moi je ne demande que ça un DBA qui nous tape sur les doigts et nous impose les rêgles de l'art que, pauvre de moi, je ne connais pas ; mais ô combien j'ai soif d'apprendre ! Merci de votre approche ! |
|
00
|
|
|
#14 |
|
Futur Membre du Club
![]() Stéphane BouvetChef de projet MOA Inscription : mai 2011 Messages : 40 ![]() |
En quoi une jointure sur chaine de caractères est "moche" ? si cette chaîne est structurée et pas une zone type commentaire ? Car, au final, un e-mail peut être considéré comme un identifiant, non ?
|
|
00
|
|
|
#15 |
|
Membre Expert
![]() |
C'est surtout moche d'un point de vue performance (cout en requêtage, volume important car propagé dans les table en FK. etC.) comparé a un identifiant purement technique comme un autoIncrement...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
00
|
|
|
#16 |
|
Futur Membre du Club
![]() Stéphane BouvetChef de projet MOA Inscription : mai 2011 Messages : 40 ![]() |
Malheureusement dans mon cas présent, le choix est mince car les données de STAT_EMAIL proviennent d'un prestataire (fichier texte importé périodiquement) qui nous fournit des statistiques sur le comportement de notre clientèle e-mailing (donc l'e-mail est une clef). Ces données doivent ensuite être intégrées à un simili-datawarehouse dont, ici, la clef est un identifiant varchar, certes, mais de type barcode "123456123456". Pourquoi varchar ? Car les zéros non significatifs doivent apparaître ("012345012345").
Voici le pourquoi du comment. Et c'est pas facile tous les jours... Mais bon pour le coup j'ai demandé à investir dans de la documentation de fonds et j'ai fait acheter le livre de référence de M.Brouard |
|
00
|
|
|
#17 | |||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Citation:
![]() On met toutes les tables qui référencent celle-ci, ou on met simplement à jour la valeur parce que la clé primaire de la table est un entier ? Citation:
Dans ce cas la clé technique est dite subrogée. Citation:
Citation:
Citation:
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|||||
|
00
|
|
|
#18 |
|
Futur Membre du Club
![]() Stéphane BouvetChef de projet MOA Inscription : mai 2011 Messages : 40 ![]() |
Eh bien l'enregistrement avec l'ancien e-mail sera flaggé "annulé" et le nouveau sera activé. Ainsi on conserve l'historique d'appartenance de l'e-mail à une personne physique ainsi que les contacts effectués sur cet e-mail. Mais je prends bonne note de vos remarques !
|
|
00
|
|
|
#19 | |
|
Membre Expert
![]() |
Citation:
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#20 | |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Citation:
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com