I use a simple query to get contract dates for a person:
SELECT
[KlienciUmowyDataPoczatkowa],
IsNULL([KlienciUmowyDataKoncowa], GETDATE()) AS 'KlienciUmowyDataKoncowa'
FROM [BazaZarzadzanie].[dbo].[KlienciPortfeleUmowy]
WHERE [PortfelID] = 3
This is what I get:
KlienciUmowyDataPoczatkowa KlienciUmowyDataKoncowa
2005-11-28 00:00:00.000 2008-07-22 00:00:00.000
2008-07-23 00:00:00.000 2010-03-09 15:45:42.457
The client signs a contract that started in 2005-11-28, and then the application was signed, so his currency contract ended on 2008-07-22, and a new one was started on 2008-07-23 and lasts until today (NULL, which was converted to Current time). There may be clients with many other applications, but it goes that way.
My question is: How do I get a contract that was / was active between let say 2008-04-01 - 2008-06-30? It is possible that the client between this period will have 2 or even 5 applications, so he should return all of them.
, IsNull? , , IsNull .
:
, marc_s , , :
SELECT
[KlienciUmowyDataPoczatkowa],
[KlienciUmowyDataKoncowa]
FROM [BazaZarzadzanie].[dbo].[KlienciPortfeleUmowy]
WHERE [PortfelID] = 3 AND
[KlienciUmowyDataPoczatkowa] <= '2008-07-01' AND IsNULL([KlienciUmowyDataKoncowa], '99991231') >= '2008-09-30'
0 2008-07-01 2008-09-30, :
2005-11-28 00:00:00.000 2008-07-22 00:00:00.000
2008-07-23 00:00:00.000 NULL
.
EDIT2:
. (20080401 - 20080630), , 1 1- (), 0 ( ).
SELECT [KlienciUmowyDataPoczatkowa],
IsNULL([KlienciUmowyDataKoncowa], '99991231') AS 'KlienciUmowyDataKoncowa'
FROM [BazaZarzadzanie].[dbo].[KlienciPortfeleUmowy]
WHERE [PortfelID] = 3
AND [KlienciUmowyDataPoczatkowa] <= '20080401' AND IsNULL([KlienciUmowyDataKoncowa], '99991231') >= '20080630'
SELECT
[KlienciUmowyDataPoczatkowa],
[KlienciUmowyDataKoncowa]
FROM
[BazaZarzadzanie].[dbo].[KlienciPortfeleUmowy]
WHERE
[PortfelID] = 3 AND
([KlienciUmowyDataPoczatkowa] BETWEEN '20080401' AND '20080630'
OR
ISNULL([KlienciUmowyDataKoncowa], GETDATE()) BETWEEN '20080401' AND '20080630')
"20080701" "20080930" 0 ( ), - 2 ().
SELECT [KlienciUmowyDataPoczatkowa],
IsNULL([KlienciUmowyDataKoncowa], '99991231') AS 'KlienciUmowyDataKoncowa'
FROM [BazaZarzadzanie].[dbo].[KlienciPortfeleUmowy]
WHERE [PortfelID] = 3
AND [KlienciUmowyDataPoczatkowa] <= '20080701' AND IsNULL([KlienciUmowyDataKoncowa], '99991231') >= '20080930'
SELECT
[KlienciUmowyDataPoczatkowa],
[KlienciUmowyDataKoncowa]
FROM
[BazaZarzadzanie].[dbo].[KlienciPortfeleUmowy]
WHERE
[PortfelID] = 3 AND
([KlienciUmowyDataPoczatkowa] BETWEEN '20080701' AND '20080930'
OR
ISNULL([KlienciUmowyDataKoncowa], GETDATE()) BETWEEN '20080701' AND '20080930')
EDIT3:
COMBINED- , . ? ?
SELECT [KlienciUmowyDataPoczatkowa]
, ISNULL([KlienciUmowyDataKoncowa], GETDATE()) AS 'KlienciUmowyDataKoncowa'
FROM [BazaZarzadzanie].[dbo].[KlienciPortfeleUmowy]
WHERE [PortfelID] = 3
AND
(
([KlienciUmowyDataPoczatkowa] BETWEEN '20080401' AND '20080630'
OR ISNULL([KlienciUmowyDataKoncowa], GETDATE()) BETWEEN '20080401' AND '20080630')
OR ([KlienciUmowyDataPoczatkowa] <= '20080401' AND IsNULL([KlienciUmowyDataKoncowa], '99991231') >= '20080630')
)
SELECT [KlienciUmowyDataPoczatkowa]
, ISNULL([KlienciUmowyDataKoncowa], GETDATE()) AS 'KlienciUmowyDataKoncowa'
FROM [BazaZarzadzanie].[dbo].[KlienciPortfeleUmowy]
WHERE [PortfelID] = 3
AND
(
([KlienciUmowyDataPoczatkowa] BETWEEN '20080701' AND '20080930'
OR ISNULL([KlienciUmowyDataKoncowa], GETDATE()) BETWEEN '20080701' AND '20080930')
OR ([KlienciUmowyDataPoczatkowa] <= '20080701' AND IsNULL([KlienciUmowyDataKoncowa], '99991231') >= '20080930')
)