Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Requete SQL : extraction de données historisation

14 réponses
Avatar
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')

10 réponses

1 2
Avatar
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" wrote in message
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')



Avatar
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" a écrit dans le message de news:

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" wrote in message
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')







Avatar
zoltix
On 13 avr, 22:46, "Synopsis" wrote:
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
Avatar
Synopsis
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" a écrit dans le message de news:

On 13 avr, 22:46, "Synopsis" wrote:
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
Avatar
zoltix
On 14 avr, 20:34, "Synopsis" wrote:
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" a écrit dans le message de ne ws:


> 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" wrote in message
>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.
Avatar
Synopsis
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" a écrit dans le message de news:

On 14 avr, 20:34, "Synopsis" wrote:
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" a écrit dans le message de news:


> 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" wrote in message
>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.
Avatar
bruno reiter
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" wrote in message
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')



Avatar
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 *************************
Avatar
Synopsis
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" a écrit dans le message de news:

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 *************************



Avatar
Michel__D
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






1 2