我需要从SQL Server中的表中获取每个日期(从今天到过去7天)的过去7天的数据计数,我正在使用下面的查询来获取结果,
select convert(varchar(10),dDate,101),count(convert(varchar(10),dDate,101)) from tblPanDetails
where dDate BETWEEN GETDATE()-7 AND GETDATE()
group by convert(varchar(10),dDate,101)
它的工作正常,结果是(在数据库中,这些日期信息只能从最近7天获得)
Column1 Column2
02/19/2020 4
02/20/2020 1
02/21/2020 2
02/22/2020 3
02/25/2020 1
但是我需要,如果日期中没有数据,它将是0,就像下面一样,
column1 column2
02/25/2020 5
02/24/2020 0
02/23/2020 6
02/22/2020 2
02/21/2020 1
02/20/2020 0
02/19/2020 2
请帮助我在SQL上取得优异的成绩。
答案 0 :(得分:0)
您可以使用临时表动态生成所需的日期。然后将此表与您的表一起形成计数。
IF OBJECT_ID('tempdb..#tblCurrentDates') IS NOT NULL DROP TABLE #tblCurrentDates
IF OBJECT_ID('tempdb..#tblPanDetails') IS NOT NULL DROP TABLE #tblPanDetails
DECLARE @DateFrom DATE, @DateTo DATE
SET @DateFrom = GETDATE()-7
SET @DateTo = GETDATE()
-- Generate 7 days dates in temp table
SELECT DATEADD(DAY,number+1,@DateFrom) [Date]
INTO #tblCurrentDates
FROM master..spt_values
WHERE type = 'P'
AND DATEADD(DAY,number+1,@DateFrom) < @DateTo
-- This is your temp table, for testing purposes
SELECT dDate= CAST(GETDATE()-1 as DATE)
INTO #tblPanDetails
--SELECT All dates with their counts in your table including no values
SELECT
Column1 = c.[Date],
Column2 = COUNT(dDate)
FROM #tblCurrentDates c
LEFT OUTER JOIN #tblPanDetails d on d.dDate = c.[Date]
GROUP BY dDate, [Date]
答案 1 :(得分:0)
您可以在查询中轻松构建7天的数据:
select v.dte, count(pd.dDate)
from (values (convert(date, getdate() - 7)),
(convert(date, getdate() - 6)),
(convert(date, getdate() - 5)),
(convert(date, getdate() - 4)),
(convert(date, getdate() - 3)),
(convert(date, getdate() - 2)),
(convert(date, getdate() - 1))
) v(dte) left join
tblPanDetails pd
on convert(date, pd.dDate) = v.dte
group by v.dte
order by v.dte;
请注意,我将第一列留为日期。您当然可以将其转换为字符串,但是我更喜欢真实的日期。