[SQL 2005] Liste des 1 prochain évenement par ville ... avec WITH ?
2 réponses
pacomoreau
Bonjour,
j'ai une base de donn=E9es (SQL Server 2005) avec une table
d'=E9venements (id, city, dateEvent) et je voudrais ressortir une liste
contenant le prochain =E9venement de chaque ville (1 seul par ville au
maximum).
J'ai essay=E9 plusieurs types de requ=EAtes sans obtenir exactement ce
que je veux :'(
Je pense pouvoir faire ce que je veux en utilisant un curseur ou une
table temporaire ... mais le probl=E8me me semble tellement "simple"
qu'il doit exister une meilleure solution ?
Pour pr=E9ciser ce que je voudrais obtenir voici un exemple de donn=E9es
:
id city dateEvent
1 PARIS 2006-01-01
2 PARIS 2007-01-01
3 PARIS 2008-01-01
4 RENNES 2006-01-01
5 LYON 2007-01-01
6 LYON 2008-01-01
Et je voudrais avoir comme r=E9sultats :
id city dateEvent
2 PARIS 2007-01-01
5 LYON 2007-01-01
(aucun r=E9sultat pour RENNES car l'=E9venement est pass=E9)
Je n'ai pas encore utilis=E9 les nouveaut=E9s de SQL Server 2005 et je
voulais savoir s'il =E9tait possible d'obtenir ce r=E9sultat avec
l'utilisation de "WITH" ?
J'ai essay=E9 2/3 choses en partant de cette requ=EAte :
SELECT city, MIN(dateEvent)
FROM Events
WHERE dateEvent >=3D getdate()
GROUP BY city
Mais sans parvenir =E0 r=E9cup=E9rer les bons ID :'(
Si vous avez une id=E9e pour mon probl=E8me je suis preneur :-)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
SQLpro
de tête sans avoir testé :
SELECT * FROM Events E WHERE EXISTS(SELECT 1 FROM Events WHERE dateEvent >= CURRENT_TIMESTAMP AND city = E.city GROUP BY city HAVING MIN(dateEvent) = E.dateEvent )
A +
Frédéric BROUARD - SQLpro - MVP SQL Server Expert SQL, SGBDR, modélisation de données SQL et SGBDR http://sqlpro.developpez.com/ Formations, conseils, audit, modélisation, optimisation, tuning : www.datasapiens.com
a écrit :
Bonjour, j'ai une base de données (SQL Server 2005) avec une table d'évenements (id, city, dateEvent) et je voudrais ressortir une liste contenant le prochain évenement de chaque ville (1 seul par ville au maximum).
J'ai essayé plusieurs types de requêtes sans obtenir exactement ce que je veux :'( Je pense pouvoir faire ce que je veux en utilisant un curseur ou une table temporaire ... mais le problème me semble tellement "simple" qu'il doit exister une meilleure solution ?
Pour préciser ce que je voudrais obtenir voici un exemple de données :
id city dateEvent 1 PARIS 2006-01-01 2 PARIS 2007-01-01 3 PARIS 2008-01-01 4 RENNES 2006-01-01 5 LYON 2007-01-01 6 LYON 2008-01-01
Et je voudrais avoir comme résultats :
id city dateEvent 2 PARIS 2007-01-01 5 LYON 2007-01-01
(aucun résultat pour RENNES car l'évenement est passé)
Je n'ai pas encore utilisé les nouveautés de SQL Server 2005 et je voulais savoir s'il était possible d'obtenir ce résultat avec l'utilisation de "WITH" ? J'ai essayé 2/3 choses en partant de cette requête :
SELECT city, MIN(dateEvent) FROM Events WHERE dateEvent >= getdate() GROUP BY city
Mais sans parvenir à récupérer les bons ID :'( Si vous avez une idée pour mon problème je suis preneur :-)
Merci d'avance :)
Paco
de tête sans avoir testé :
SELECT *
FROM Events E
WHERE EXISTS(SELECT 1
FROM Events
WHERE dateEvent >= CURRENT_TIMESTAMP
AND city = E.city
GROUP BY city
HAVING MIN(dateEvent) = E.dateEvent )
A +
Frédéric BROUARD - SQLpro - MVP SQL Server
Expert SQL, SGBDR, modélisation de données
SQL et SGBDR http://sqlpro.developpez.com/
Formations, conseils, audit, modélisation,
optimisation, tuning : www.datasapiens.com
pacomoreau@gmail.com a écrit :
Bonjour,
j'ai une base de données (SQL Server 2005) avec une table
d'évenements (id, city, dateEvent) et je voudrais ressortir une liste
contenant le prochain évenement de chaque ville (1 seul par ville au
maximum).
J'ai essayé plusieurs types de requêtes sans obtenir exactement ce
que je veux :'(
Je pense pouvoir faire ce que je veux en utilisant un curseur ou une
table temporaire ... mais le problème me semble tellement "simple"
qu'il doit exister une meilleure solution ?
Pour préciser ce que je voudrais obtenir voici un exemple de données
:
id city dateEvent
1 PARIS 2006-01-01
2 PARIS 2007-01-01
3 PARIS 2008-01-01
4 RENNES 2006-01-01
5 LYON 2007-01-01
6 LYON 2008-01-01
Et je voudrais avoir comme résultats :
id city dateEvent
2 PARIS 2007-01-01
5 LYON 2007-01-01
(aucun résultat pour RENNES car l'évenement est passé)
Je n'ai pas encore utilisé les nouveautés de SQL Server 2005 et je
voulais savoir s'il était possible d'obtenir ce résultat avec
l'utilisation de "WITH" ?
J'ai essayé 2/3 choses en partant de cette requête :
SELECT city, MIN(dateEvent)
FROM Events
WHERE dateEvent >= getdate()
GROUP BY city
Mais sans parvenir à récupérer les bons ID :'(
Si vous avez une idée pour mon problème je suis preneur :-)
SELECT * FROM Events E WHERE EXISTS(SELECT 1 FROM Events WHERE dateEvent >= CURRENT_TIMESTAMP AND city = E.city GROUP BY city HAVING MIN(dateEvent) = E.dateEvent )
A +
Frédéric BROUARD - SQLpro - MVP SQL Server Expert SQL, SGBDR, modélisation de données SQL et SGBDR http://sqlpro.developpez.com/ Formations, conseils, audit, modélisation, optimisation, tuning : www.datasapiens.com
a écrit :
Bonjour, j'ai une base de données (SQL Server 2005) avec une table d'évenements (id, city, dateEvent) et je voudrais ressortir une liste contenant le prochain évenement de chaque ville (1 seul par ville au maximum).
J'ai essayé plusieurs types de requêtes sans obtenir exactement ce que je veux :'( Je pense pouvoir faire ce que je veux en utilisant un curseur ou une table temporaire ... mais le problème me semble tellement "simple" qu'il doit exister une meilleure solution ?
Pour préciser ce que je voudrais obtenir voici un exemple de données :
id city dateEvent 1 PARIS 2006-01-01 2 PARIS 2007-01-01 3 PARIS 2008-01-01 4 RENNES 2006-01-01 5 LYON 2007-01-01 6 LYON 2008-01-01
Et je voudrais avoir comme résultats :
id city dateEvent 2 PARIS 2007-01-01 5 LYON 2007-01-01
(aucun résultat pour RENNES car l'évenement est passé)
Je n'ai pas encore utilisé les nouveautés de SQL Server 2005 et je voulais savoir s'il était possible d'obtenir ce résultat avec l'utilisation de "WITH" ? J'ai essayé 2/3 choses en partant de cette requête :
SELECT city, MIN(dateEvent) FROM Events WHERE dateEvent >= getdate() GROUP BY city
Mais sans parvenir à récupérer les bons ID :'( Si vous avez une idée pour mon problème je suis preneur :-)