pomoc w zapytaniu sql

2

proszę o pomoc w zapytaniu.
mam dane: key, validfrom, validto

zapytanie:
select
20210225,
count(fc.Key)
from dwh.Fact fc
inner join d.History ch on ch.Key = fc.Key and 20210225 between ch.ValidFrom and ch.ValidTo

potrzebuję zmodyfikowac zapytanie aby podaną wartość dla daty 25022021 pokazywał dla każdego dnia począwszy od dnia 20200101 do dziś.

teraz pokazuje 20210225 [wartość z count]
a chce zeby zliczał dla każdego dnia osobno bez zmiany daty w zapytaniu

ktoś pomoże?

2

Pisane bez testowania

select
ch.ValidFrom,
count(fc.Key)
from dwh.Fact fc
inner join d.History ch on ch.Key = fc.Key 
where ch.ValidFrom> 20200101 and ch.Validto < now() -- nie wiem co to za baza to tu może się to róznić 
group by ch.ValidFrom
0

@UglyMan: po Validfrom nie moze byc, bo mam key dla którego validfrom:01.02.2020 i valid to: 12.02.2020, więc chciałabym aby w councie policzyl się dla każdego dnia od 01.02.2020 do 12.02.2020, a tak zliczy się tylko dla daty z Validfrom 1.02.2020

0

powiedzmy że mam taką bazę:
key validfrom validto
1 03.02.2020 05.02.2020
2 07.02.2020 09.02.2020
3 07.02.2020 10.02.2020
4 08.02.2020 11.02.2020

chciałabym otrzymać dane: ( zakładając , że chcę dane od 01.02.2020)
count(key)
01.02.2020 0
02.02.2020 0
03.02.2020 1
04.02.2020 1
05.02.2020 1
06.02.2020 0
07.02.2020 2
08.02.2020 3
09.02.2020 3
10.02.2020 2
11.02.2020 1

0

Czyli mam to:

DECLARE @StartDate DATE = '20200101'
, @EndDate DATE = getdate()

SELECT DATEADD(DAY, nbr - 1, @StartDate) as DAY
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY c.object_id ) AS Nbr
FROM sys.columns c
) nbrs
WHERE nbr - 1 <= DATEDIFF(DAY, @StartDate, @EndDate) ---> i to mi wyciąga dni takie jakie chce

i do tego chce policzyć to:

select
'DATA' ( data z zapytania wyżej)
count(fc.Key)
from dwh.Fact fc
inner join d.History ch on ch.Key = fc.Key and "DATA"(z zapytania wyżej) between ch.ValidFrom and ch.ValidTo

Nie wiem jak to połączyć. Wie ktoś i pomoże?

0

@milena1234:

DECLARE @StartDate DATE = '2020-01-01'
	,@EndDate DATE = getdate();

SELECT NBR.DAY
	,SUM(iif(VALID.ID IS NULL, 0, 1))
FROM dwh.Fact fc
INNER JOIN d.History ch ON ch.KEY = fc.KEY
RIGHT JOIN (
	SELECT dateadd(d, row_number() OVER (ORDER BY object_id) - 1, @StartDate) DAY
	FROM sys.all_objects
	) NBR ON NBR.DAY BETWEEN ch.ValidFrom AND ch.ValidTo
WHERE NBR.DAY <= @EndDate
GROUP BY NBR.DAY
ORDER BY NBR.DAY

1 użytkowników online, w tym zalogowanych: 0, gości: 1