Requete SQL : extraction de données historisation

Le
Synopsis
Bonjour,

Il existe dans mon infocentre une table d'historisation de structure
simialaire à celle ci-dessous.

DEBUT FIN REGION VILLE
01/01/2000 30/04/2002 IDF Paris
01/05/2002 14/02/2003 IDF Montreuil
15/02/2003 21/10/2004 IDF Neuilly
22/10/2004 15/01/2005 BRE Rennes
16/01/2005 18/06/2006 BRE Brest
19/06/2006 30/09/2007 NRD Lille
01/10/2007 30/09/2007 IDF Lille
01/10/2007 31/12/2999 IDF Arcueil

Je cherche une méthode, une requête simple qui m'extrait l''historisation au
niveau région.

DEBUT FIN REGION
01/01/2000 21/10/2004 IDF
22/10/2004 18/06/2006 BRE
19/06/2006 30/09/2007 NRD
01/10/2007 31/12/2999 IDF

La méthode par Group By, min, max ne fonctionne pas, car la région IDF
apparaît deux fois.

En utilisant les fonctions analytiques Over Partition ?

La méthode doit-être simple si possible ; j'utlise B.O. comme outil
d'intérrogation.
Je souhaiterai implémenter la méthode dans le designer.

Cordialement,



Script SQL :

if exists(select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME =
'LOCALISATION')
DROP TABLE LOCALISATION
GO

CREATE TABLE LOCALISATION
(
DATE_DEBUT DATE
, DATE_FIN DATE
, REGION NVARCHAR(3)
, VILLE NVARCHAR(20)
)
GO
SET NOCOUNT ON
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20000101', 112) ,
CONVERT(DATETIME, '20020430', 112), 'IDF', 'Paris')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20020430', 112) + 1 ,
CONVERT(DATETIME, '20030214', 112), 'IDF', 'Montreuil')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20030214', 112) + 1 ,
CONVERT(DATETIME, '20041021', 112), 'IDF', 'Neuilly')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20041021', 112) + 1 ,
CONVERT(DATETIME, '20050115', 112), 'BRE', 'Rennes')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20050115', 112) + 1 ,
CONVERT(DATETIME, '20060618', 112), 'BRE', 'Brest')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20060618', 112) + 1 ,
CONVERT(DATETIME, '20070930', 112), 'NRD', 'Lille')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20070930', 112) + 1 ,
CONVERT(DATETIME, '20070930', 112), 'IDF', 'Lille')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20070930', 112) + 1 ,
CONVERT(DATETIME, '29991231', 112), 'IDF', 'Arcueil')
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Med Bouchenafa
Le #19113121
C'est quoi le discriminant entre les deux régions IDF?
Comment savoir ce qui appartient au premier IDF et ce qui appartient au
second IDF?
--
Bien Cordialement
Med Bouchenafa

"Synopsis" news:49e3a4a5$0$21363$
Bonjour,

Il existe dans mon infocentre une table d'historisation de structure
simialaire à celle ci-dessous.

DEBUT FIN REGION VILLE
01/01/2000 30/04/2002 IDF Paris
01/05/2002 14/02/2003 IDF Montreuil
15/02/2003 21/10/2004 IDF Neuilly
22/10/2004 15/01/2005 BRE Rennes
16/01/2005 18/06/2006 BRE Brest
19/06/2006 30/09/2007 NRD Lille
01/10/2007 30/09/2007 IDF Lille
01/10/2007 31/12/2999 IDF Arcueil

Je cherche une méthode, une requête simple qui m'extrait l''historisation
au niveau région.

DEBUT FIN REGION
01/01/2000 21/10/2004 IDF
22/10/2004 18/06/2006 BRE
19/06/2006 30/09/2007 NRD
01/10/2007 31/12/2999 IDF

La méthode par Group By, min, max ne fonctionne pas, car la région IDF
apparaît deux fois.

En utilisant les fonctions analytiques Over Partition ?

La méthode doit-être simple si possible ; j'utlise B.O. comme outil
d'intérrogation.
Je souhaiterai implémenter la méthode dans le designer.

Cordialement,


---------------------------------------------------------------------------------------------------
Script SQL :

if exists(select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME =
'LOCALISATION')
DROP TABLE LOCALISATION
GO

CREATE TABLE LOCALISATION
(
DATE_DEBUT DATE
, DATE_FIN DATE
, REGION NVARCHAR(3)
, VILLE NVARCHAR(20)
)
GO
SET NOCOUNT ON
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20000101', 112) ,
CONVERT(DATETIME, '20020430', 112), 'IDF', 'Paris')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20020430', 112) + 1 ,
CONVERT(DATETIME, '20030214', 112), 'IDF', 'Montreuil')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20030214', 112) + 1 ,
CONVERT(DATETIME, '20041021', 112), 'IDF', 'Neuilly')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20041021', 112) + 1 ,
CONVERT(DATETIME, '20050115', 112), 'BRE', 'Rennes')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20050115', 112) + 1 ,
CONVERT(DATETIME, '20060618', 112), 'BRE', 'Brest')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20060618', 112) + 1 ,
CONVERT(DATETIME, '20070930', 112), 'NRD', 'Lille')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20070930', 112) + 1 ,
CONVERT(DATETIME, '20070930', 112), 'IDF', 'Lille')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20070930', 112) + 1 ,
CONVERT(DATETIME, '29991231', 112), 'IDF', 'Arcueil')



Synopsis
Le #19115521
Il y a continuité des plages d'historisation :
DATE_DEBUT = DATE_FIN(précédent) + 1

Je suis ici dans un cas "simple".

Dans mon infocentre, il n'y a pas toujours de continuité des périodes.
Il faudrait idéalement tenir compte des ruptures dans la requête.

Cordialement,




"Med Bouchenafa"
C'est quoi le discriminant entre les deux régions IDF?
Comment savoir ce qui appartient au premier IDF et ce qui appartient au
second IDF?
--
Bien Cordialement
Med Bouchenafa

"Synopsis" news:49e3a4a5$0$21363$
Bonjour,

Il existe dans mon infocentre une table d'historisation de structure
simialaire à celle ci-dessous.

DEBUT FIN REGION VILLE
01/01/2000 30/04/2002 IDF Paris
01/05/2002 14/02/2003 IDF Montreuil
15/02/2003 21/10/2004 IDF Neuilly
22/10/2004 15/01/2005 BRE Rennes
16/01/2005 18/06/2006 BRE Brest
19/06/2006 30/09/2007 NRD Lille
01/10/2007 30/09/2007 IDF Lille
01/10/2007 31/12/2999 IDF Arcueil

Je cherche une méthode, une requête simple qui m'extrait l''historisation
au niveau région.

DEBUT FIN REGION
01/01/2000 21/10/2004 IDF
22/10/2004 18/06/2006 BRE
19/06/2006 30/09/2007 NRD
01/10/2007 31/12/2999 IDF

La méthode par Group By, min, max ne fonctionne pas, car la région IDF
apparaît deux fois.

En utilisant les fonctions analytiques Over Partition ?

La méthode doit-être simple si possible ; j'utlise B.O. comme outil
d'intérrogation.
Je souhaiterai implémenter la méthode dans le designer.

Cordialement,


---------------------------------------------------------------------------------------------------
Script SQL :

if exists(select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME =
'LOCALISATION')
DROP TABLE LOCALISATION
GO

CREATE TABLE LOCALISATION
(
DATE_DEBUT DATE
, DATE_FIN DATE
, REGION NVARCHAR(3)
, VILLE NVARCHAR(20)
)
GO
SET NOCOUNT ON
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20000101', 112) ,
CONVERT(DATETIME, '20020430', 112), 'IDF', 'Paris')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20020430', 112) + 1 ,
CONVERT(DATETIME, '20030214', 112), 'IDF', 'Montreuil')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20030214', 112) + 1 ,
CONVERT(DATETIME, '20041021', 112), 'IDF', 'Neuilly')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20041021', 112) + 1 ,
CONVERT(DATETIME, '20050115', 112), 'BRE', 'Rennes')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20050115', 112) + 1 ,
CONVERT(DATETIME, '20060618', 112), 'BRE', 'Brest')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20060618', 112) + 1 ,
CONVERT(DATETIME, '20070930', 112), 'NRD', 'Lille')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20070930', 112) + 1 ,
CONVERT(DATETIME, '20070930', 112), 'IDF', 'Lille')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20070930', 112) + 1 ,
CONVERT(DATETIME, '29991231', 112), 'IDF', 'Arcueil')







zoltix
Le #19118361
On 13 avr, 22:46, "Synopsis"
Bonjour,

Il existe dans mon infocentre une table d'historisation de structure
simialaire à celle ci-dessous.

DEBUT          FIN               REGION    VI LLE
01/01/2000    30/04/2002    IDF            Paris
01/05/2002    14/02/2003    IDF            Montreuil
15/02/2003    21/10/2004    IDF            Neuilly
22/10/2004    15/01/2005    BRE           Rennes
16/01/2005    18/06/2006    BRE           Brest
19/06/2006    30/09/2007    NRD          Lille
01/10/2007    30/09/2007    IDF            Lille
01/10/2007    31/12/2999    IDF            Arcueil

Je cherche une méthode, une requête simple qui m'extrait l''historisa tion au
niveau région.

DEBUT          FIN               REGION
01/01/2000    21/10/2004    IDF
22/10/2004    18/06/2006    BRE
19/06/2006    30/09/2007    NRD
01/10/2007    31/12/2999    IDF

La méthode par Group By, min, max ne fonctionne pas, car la région ID F
apparaît deux fois.

En utilisant les fonctions analytiques Over Partition ?

La méthode doit-être simple si possible ; j'utlise B.O. comme outil
d'intérrogation.
Je souhaiterai implémenter la méthode dans le designer.

Cordialement,

------------------------------------------------------------------------- --------------------------
Script SQL :

if exists(select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME =
'LOCALISATION')
DROP TABLE LOCALISATION
GO

CREATE TABLE LOCALISATION
(
DATE_DEBUT DATE
, DATE_FIN DATE
, REGION NVARCHAR(3)
, VILLE NVARCHAR(20)
)
GO
SET NOCOUNT ON
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20000101', 112) ,
CONVERT(DATETIME, '20020430', 112), 'IDF', 'Paris')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20020430', 112) + 1 ,
CONVERT(DATETIME, '20030214', 112), 'IDF', 'Montreuil')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20030214', 112) + 1 ,
CONVERT(DATETIME, '20041021', 112), 'IDF', 'Neuilly')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20041021', 112) + 1 ,
CONVERT(DATETIME, '20050115', 112), 'BRE', 'Rennes')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20050115', 112) + 1 ,
CONVERT(DATETIME, '20060618', 112), 'BRE', 'Brest')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20060618', 112) + 1 ,
CONVERT(DATETIME, '20070930', 112), 'NRD', 'Lille')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20070930', 112) + 1 ,
CONVERT(DATETIME, '20070930', 112), 'IDF', 'Lille')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20070930', 112) + 1 ,
CONVERT(DATETIME, '29991231', 112), 'IDF', 'Arcueil')


C'est un truc du style que tu veux ?

2004-10-22 BRE 2006-06-18 BRE
2000-01-01 IDF 2999-12-31 IDF
2006-06-19 NRD 2007-09-30 NRD

select
*
from
( select min(DATE_DEBUT) as DATE_DEBUT,REGION
from LOCALISATION
group by REGION )
as debut inner join
( select max(DATE_Fin) as DATE_Fin,REGION
from LOCALISATION
group by REGION )
as fin
on debut.REGION = fin.REGION
Synopsis
Le #19122191
Non.

La réponse est dans le mail.

DEBUT FIN REGION
01/01/2000 21/10/2004 IDF
22/10/2004 18/06/2006 BRE
19/06/2006 30/09/2007 NRD
01/10/2007 31/12/2999 IDF



IDF doit apparaître deux fois.

"zoltix"
On 13 avr, 22:46, "Synopsis"
Bonjour,

Il existe dans mon infocentre une table d'historisation de structure
simialaire à celle ci-dessous.

DEBUT FIN REGION VILLE
01/01/2000 30/04/2002 IDF Paris
01/05/2002 14/02/2003 IDF Montreuil
15/02/2003 21/10/2004 IDF Neuilly
22/10/2004 15/01/2005 BRE Rennes
16/01/2005 18/06/2006 BRE Brest
19/06/2006 30/09/2007 NRD Lille
01/10/2007 30/09/2007 IDF Lille
01/10/2007 31/12/2999 IDF Arcueil

Je cherche une méthode, une requête simple qui m'extrait l''historisation
au
niveau région.

DEBUT FIN REGION
01/01/2000 21/10/2004 IDF
22/10/2004 18/06/2006 BRE
19/06/2006 30/09/2007 NRD
01/10/2007 31/12/2999 IDF

La méthode par Group By, min, max ne fonctionne pas, car la région IDF
apparaît deux fois.

En utilisant les fonctions analytiques Over Partition ?

La méthode doit-être simple si possible ; j'utlise B.O. comme outil
d'intérrogation.
Je souhaiterai implémenter la méthode dans le designer.

Cordialement,

---------------------------------------------------------------------------------------------------
Script SQL :

if exists(select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME > 'LOCALISATION')
DROP TABLE LOCALISATION
GO

CREATE TABLE LOCALISATION
(
DATE_DEBUT DATE
, DATE_FIN DATE
, REGION NVARCHAR(3)
, VILLE NVARCHAR(20)
)
GO
SET NOCOUNT ON
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20000101', 112) ,
CONVERT(DATETIME, '20020430', 112), 'IDF', 'Paris')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20020430', 112) + 1 ,
CONVERT(DATETIME, '20030214', 112), 'IDF', 'Montreuil')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20030214', 112) + 1 ,
CONVERT(DATETIME, '20041021', 112), 'IDF', 'Neuilly')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20041021', 112) + 1 ,
CONVERT(DATETIME, '20050115', 112), 'BRE', 'Rennes')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20050115', 112) + 1 ,
CONVERT(DATETIME, '20060618', 112), 'BRE', 'Brest')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20060618', 112) + 1 ,
CONVERT(DATETIME, '20070930', 112), 'NRD', 'Lille')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20070930', 112) + 1 ,
CONVERT(DATETIME, '20070930', 112), 'IDF', 'Lille')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20070930', 112) + 1 ,
CONVERT(DATETIME, '29991231', 112), 'IDF', 'Arcueil')


C'est un truc du style que tu veux ?

2004-10-22 BRE 2006-06-18 BRE
2000-01-01 IDF 2999-12-31 IDF
2006-06-19 NRD 2007-09-30 NRD

select
*
from
( select min(DATE_DEBUT) as DATE_DEBUT,REGION
from LOCALISATION
group by REGION )
as debut inner join
( select max(DATE_Fin) as DATE_Fin,REGION
from LOCALISATION
group by REGION )
as fin
on debut.REGION = fin.REGION
zoltix
Le #19124431
On 14 avr, 20:34, "Synopsis"
Il y a continuité des plages d'historisation :
DATE_DEBUT = DATE_FIN(précédent) + 1

Je suis ici dans un cas "simple".

Dans mon infocentre, il n'y a pas toujours de continuité des périodes .
Il faudrait idéalement tenir compte des ruptures dans la requête.

Cordialement,

"Med Bouchenafa"

> C'est quoi le discriminant entre les deux régions IDF?
> Comment savoir ce qui appartient au premier IDF et ce qui appartient au
> second IDF?
> --
> Bien Cordialement
> Med Bouchenafa

> "Synopsis" >news:49e3a4a5$0$21363$
>> Bonjour,

>> Il existe dans mon infocentre une table d'historisation de structure
>> simialaire à celle ci-dessous.

>> DEBUT          FIN               REGION    VILLE
>> 01/01/2000    30/04/2002    IDF            Paris
>> 01/05/2002    14/02/2003    IDF            Montreu il
>> 15/02/2003    21/10/2004    IDF            Neuilly
>> 22/10/2004    15/01/2005    BRE           Rennes
>> 16/01/2005    18/06/2006    BRE           Brest
>> 19/06/2006    30/09/2007    NRD          Lille
>> 01/10/2007    30/09/2007    IDF            Lille
>> 01/10/2007    31/12/2999    IDF            Arcueil

>> Je cherche une méthode, une requête simple qui m'extrait l''histor isation
>> au niveau région.

>> DEBUT          FIN               REGION
>> 01/01/2000    21/10/2004    IDF
>> 22/10/2004    18/06/2006    BRE
>> 19/06/2006    30/09/2007    NRD
>> 01/10/2007    31/12/2999    IDF

>> La méthode par Group By, min, max ne fonctionne pas, car la région IDF
>> apparaît deux fois.

>> En utilisant les fonctions analytiques Over Partition ?

>> La méthode doit-être simple si possible ; j'utlise B.O. comme outi l
>> d'intérrogation.
>> Je souhaiterai implémenter la méthode dans le designer.

>> Cordialement,

>> ---------------------------------------------------------------------- -----------------------------
>> Script SQL :

>> if exists(select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME =
>> 'LOCALISATION')
>> DROP TABLE LOCALISATION
>> GO

>> CREATE TABLE LOCALISATION
>> (
>> DATE_DEBUT DATE
>> , DATE_FIN DATE
>> , REGION NVARCHAR(3)
>> , VILLE NVARCHAR(20)
>> )
>> GO
>> SET NOCOUNT ON
>> INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20000101', 112) ,
>> CONVERT(DATETIME, '20020430', 112), 'IDF', 'Paris')
>> INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20020430', 112) + 1 ,
>> CONVERT(DATETIME, '20030214', 112), 'IDF', 'Montreuil')
>> INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20030214', 112) + 1 ,
>> CONVERT(DATETIME, '20041021', 112), 'IDF', 'Neuilly')
>> INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20041021', 112) + 1 ,
>> CONVERT(DATETIME, '20050115', 112), 'BRE', 'Rennes')
>> INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20050115', 112) + 1 ,
>> CONVERT(DATETIME, '20060618', 112), 'BRE', 'Brest')
>> INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20060618', 112) + 1 ,
>> CONVERT(DATETIME, '20070930', 112), 'NRD', 'Lille')
>> INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20070930', 112) + 1 ,
>> CONVERT(DATETIME, '20070930', 112), 'IDF', 'Lille')
>> INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20070930', 112) + 1 ,
>> CONVERT(DATETIME, '29991231', 112), 'IDF', 'Arcueil')



Je n'arrive pas comprendre ta sortie....
Tu expliques que DATE_DEBUT = DATE_FIN(précédent) + 1
+1 c'est un ans , mois ou seconde ...
avec un petit exemple et une description de la sélection a
obtenir.
Synopsis
Le #19129551
Il y a continuité des plages dans l'historisation : Il n'y a pas de trou.

La date de fin 31/12/2999 est une astuce pour éviter le null, cad inconnu ou
ad vitam aeternam.

Le fait d'historiser de cet façon permet de connaître la localisation à une
date donnée.

Dans les infocentres on modèlise différemment que les systèmes
transactionnels.

Exemple :

select *
from localisation
where getdate() between begin_date and end_date

Dans le post initial, je vous ai donné la sortie attendue.



"zoltix"
On 14 avr, 20:34, "Synopsis"
Il y a continuité des plages d'historisation :
DATE_DEBUT = DATE_FIN(précédent) + 1

Je suis ici dans un cas "simple".

Dans mon infocentre, il n'y a pas toujours de continuité des périodes.
Il faudrait idéalement tenir compte des ruptures dans la requête.

Cordialement,

"Med Bouchenafa"

> C'est quoi le discriminant entre les deux régions IDF?
> Comment savoir ce qui appartient au premier IDF et ce qui appartient au
> second IDF?
> --
> Bien Cordialement
> Med Bouchenafa

> "Synopsis" >news:49e3a4a5$0$21363$
>> Bonjour,

>> Il existe dans mon infocentre une table d'historisation de structure
>> simialaire à celle ci-dessous.

>> DEBUT FIN REGION VILLE
>> 01/01/2000 30/04/2002 IDF Paris
>> 01/05/2002 14/02/2003 IDF Montreuil
>> 15/02/2003 21/10/2004 IDF Neuilly
>> 22/10/2004 15/01/2005 BRE Rennes
>> 16/01/2005 18/06/2006 BRE Brest
>> 19/06/2006 30/09/2007 NRD Lille
>> 01/10/2007 30/09/2007 IDF Lille
>> 01/10/2007 31/12/2999 IDF Arcueil

>> Je cherche une méthode, une requête simple qui m'extrait
>> l''historisation
>> au niveau région.

>> DEBUT FIN REGION
>> 01/01/2000 21/10/2004 IDF
>> 22/10/2004 18/06/2006 BRE
>> 19/06/2006 30/09/2007 NRD
>> 01/10/2007 31/12/2999 IDF

>> La méthode par Group By, min, max ne fonctionne pas, car la région IDF
>> apparaît deux fois.

>> En utilisant les fonctions analytiques Over Partition ?

>> La méthode doit-être simple si possible ; j'utlise B.O. comme outil
>> d'intérrogation.
>> Je souhaiterai implémenter la méthode dans le designer.

>> Cordialement,

>> ---------------------------------------------------------------------------------------------------
>> Script SQL :

>> if exists(select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME > >> 'LOCALISATION')
>> DROP TABLE LOCALISATION
>> GO

>> CREATE TABLE LOCALISATION
>> (
>> DATE_DEBUT DATE
>> , DATE_FIN DATE
>> , REGION NVARCHAR(3)
>> , VILLE NVARCHAR(20)
>> )
>> GO
>> SET NOCOUNT ON
>> INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20000101', 112) ,
>> CONVERT(DATETIME, '20020430', 112), 'IDF', 'Paris')
>> INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20020430', 112) + 1
>> ,
>> CONVERT(DATETIME, '20030214', 112), 'IDF', 'Montreuil')
>> INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20030214', 112) + 1
>> ,
>> CONVERT(DATETIME, '20041021', 112), 'IDF', 'Neuilly')
>> INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20041021', 112) + 1
>> ,
>> CONVERT(DATETIME, '20050115', 112), 'BRE', 'Rennes')
>> INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20050115', 112) + 1
>> ,
>> CONVERT(DATETIME, '20060618', 112), 'BRE', 'Brest')
>> INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20060618', 112) + 1
>> ,
>> CONVERT(DATETIME, '20070930', 112), 'NRD', 'Lille')
>> INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20070930', 112) + 1
>> ,
>> CONVERT(DATETIME, '20070930', 112), 'IDF', 'Lille')
>> INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20070930', 112) + 1
>> ,
>> CONVERT(DATETIME, '29991231', 112), 'IDF', 'Arcueil')



Je n'arrive pas comprendre ta sortie....
Tu expliques que DATE_DEBUT = DATE_FIN(précédent) + 1
+1 c'est un ans , mois ou seconde ...
avec un petit exemple et une description de la sélection a
obtenir.
bruno reiter
Le #19135981
pas très beau mais a l'air de fonctionner

BR



/*
drop table brtt

create table brtt
(
datdeb datetime,
datfin datetime,
region nvarchar(99)
)
insert brtt values('20000101', '20020430', 'idf');
insert brtt values('20020501', '20030214', 'idf');
insert brtt values('20030215', '20041021', 'idf');
insert brtt values('20041022', '20050115', 'bre');
insert brtt values('20050116', '20060618', 'bre');
insert brtt values('20060619', '20070930', 'nrd');
insert brtt values('20071001', '20071031', 'idf');
insert brtt values('20071101', '29991231', 'idf');
*/

select xx.region , max(deb), fin
from
(
select y.region , y.deb
from
(
select b1.datdeb as deb, b1.datfin as fin, (select b2.datfin from brtt b2
where b2.datfin = b1.datdeb - 1 and b1.region = b2.region ) as deb2,
b1.region as region
from brtt b1
) as y
where deb2 is null --or fin2 is null
) xx
join
(
select y.region , y.fin
from
(
select b1.datdeb as deb, b1.datfin as fin, (select b2.datdeb from brtt b2
where b2.datdeb = b1.datfin + 1 and b1.region = b2.region ) as fin2,
b1.region as region
from brtt b1
) as y
where fin2 is null
) yy
on xx.region = yy. region
and fin > deb
group by xx.region , fin
order by 1, 2, 3


"Synopsis" news:49e3a4a5$0$21363$
Bonjour,

Il existe dans mon infocentre une table d'historisation de structure
simialaire à celle ci-dessous.

DEBUT FIN REGION VILLE
01/01/2000 30/04/2002 IDF Paris
01/05/2002 14/02/2003 IDF Montreuil
15/02/2003 21/10/2004 IDF Neuilly
22/10/2004 15/01/2005 BRE Rennes
16/01/2005 18/06/2006 BRE Brest
19/06/2006 30/09/2007 NRD Lille
01/10/2007 30/09/2007 IDF Lille
01/10/2007 31/12/2999 IDF Arcueil

Je cherche une méthode, une requête simple qui m'extrait l''historisation
au niveau région.

DEBUT FIN REGION
01/01/2000 21/10/2004 IDF
22/10/2004 18/06/2006 BRE
19/06/2006 30/09/2007 NRD
01/10/2007 31/12/2999 IDF

La méthode par Group By, min, max ne fonctionne pas, car la région IDF
apparaît deux fois.

En utilisant les fonctions analytiques Over Partition ?

La méthode doit-être simple si possible ; j'utlise B.O. comme outil
d'intérrogation.
Je souhaiterai implémenter la méthode dans le designer.

Cordialement,


---------------------------------------------------------------------------------------------------
Script SQL :

if exists(select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME =
'LOCALISATION')
DROP TABLE LOCALISATION
GO

CREATE TABLE LOCALISATION
(
DATE_DEBUT DATE
, DATE_FIN DATE
, REGION NVARCHAR(3)
, VILLE NVARCHAR(20)
)
GO
SET NOCOUNT ON
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20000101', 112) ,
CONVERT(DATETIME, '20020430', 112), 'IDF', 'Paris')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20020430', 112) + 1 ,
CONVERT(DATETIME, '20030214', 112), 'IDF', 'Montreuil')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20030214', 112) + 1 ,
CONVERT(DATETIME, '20041021', 112), 'IDF', 'Neuilly')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20041021', 112) + 1 ,
CONVERT(DATETIME, '20050115', 112), 'BRE', 'Rennes')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20050115', 112) + 1 ,
CONVERT(DATETIME, '20060618', 112), 'BRE', 'Brest')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20060618', 112) + 1 ,
CONVERT(DATETIME, '20070930', 112), 'NRD', 'Lille')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20070930', 112) + 1 ,
CONVERT(DATETIME, '20070930', 112), 'IDF', 'Lille')
INSERT INTO LOCALISATION VALUES( CONVERT(DATETIME, '20070930', 112) + 1 ,
CONVERT(DATETIME, '29991231', 112), 'IDF', 'Arcueil')



Fred BROUARD
Le #19143971
Bonjour,

vos données étant fausses au départ, il n'y a pas de requête possible !

Synopsis a écrit :
Bonjour,

Il existe dans mon infocentre une table d'historisation de structure
simialaire à celle ci-dessous.

DEBUT FIN REGION VILLE
01/01/2000 30/04/2002 IDF Paris
01/05/2002 14/02/2003 IDF Montreuil
15/02/2003 21/10/2004 IDF Neuilly
22/10/2004 15/01/2005 BRE Rennes
16/01/2005 18/06/2006 BRE Brest
19/06/2006 30/09/2007 NRD Lille



Ligne fausse : date début > date fin.

01/10/2007 30/09/2007 IDF Lille



Commencez par mettre des contraintes pour éviter de polluer votre base
avec des données incohérentes !

a +




--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************
Synopsis
Le #19155851
Ce n'est pas un extrait de ma base de données.
J'ai monté l'exemple en rédigeant le mail.

Pour l'exemple, on remplace
01/10/2007 30/09/2007 IDF Lille
Par
01/10/2007 30/09/2007 IDF Bondy

Concernant les contraintes d'intégrité, dans un datawarehouse elles sont
rares.
Les contrôles se font au moment du chargement.

On recherche de la performance ; on monte plutôt des indexes.


"Fred BROUARD"
Bonjour,

vos données étant fausses au départ, il n'y a pas de requête possible !

Synopsis a écrit :
Bonjour,

Il existe dans mon infocentre une table d'historisation de structure
simialaire à celle ci-dessous.

DEBUT FIN REGION VILLE
01/01/2000 30/04/2002 IDF Paris
01/05/2002 14/02/2003 IDF Montreuil
15/02/2003 21/10/2004 IDF Neuilly
22/10/2004 15/01/2005 BRE Rennes
16/01/2005 18/06/2006 BRE Brest
19/06/2006 30/09/2007 NRD Lille



Ligne fausse : date début > date fin.

01/10/2007 30/09/2007 IDF Lille



Commencez par mettre des contraintes pour éviter de polluer votre base
avec des données incohérentes !

a +




--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
Enseignant aux Arts & Métiers PACA et à L'ISEN Toulon - Var Technologies
*********************** http://www.sqlspot.com *************************



Michel__D
Le #19161841
Bonjour,

Synopsis a écrit :
Ce n'est pas un extrait de ma base de données.
J'ai monté l'exemple en rédigeant le mail.

Pour l'exemple, on remplace
01/10/2007 30/09/2007 IDF Lille
Par
01/10/2007 30/09/2007 IDF Bondy



Le problème n'est pas sur la ville, mais sur les dates


DEBUT FIN REGION VILLE
01/01/2000 30/04/2002 IDF Paris
01/05/2002 14/02/2003 IDF Montreuil
15/02/2003 21/10/2004 IDF Neuilly
22/10/2004 15/01/2005 BRE Rennes
16/01/2005 18/06/2006 BRE Brest
19/06/2006 30/09/2007 NRD Lille






>>
Ligne fausse : date début > date fin.

01/10/2007 30/09/2007 IDF Lille






Publicité
Poster une réponse
Anonyme