获取最近7天的日期数据

时间:2020-02-25 08:45:13

标签: sql sql-server

我需要从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上取得优异的成绩。

2 个答案:

答案 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;

请注意,我将第一列留为日期。您当然可以将其转换为字符串,但是我更喜欢真实的日期。