Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取最近7天的日期数据_Sql_Sql Server - Fatal编程技术网

Sql 获取最近7天的日期数据

Sql 获取最近7天的日期数据,sql,sql-server,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) 它的工作性能和结果是在

我需要从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中获取上述结果。

您可以使用临时表动态生成所需的日期。然后将此表与您的表合并以形成计数

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]

您可以在查询中轻松构建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;

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

很好,但它会返回以下结果,``Column1Column2 2/19/2020 12:00:00 AM 0 2/20/2020 12:00:00 AM 0 2/21/2020 12:00:00 AM 0 2/22/2020 12:00:00 AM 0 2/23/2020 12:00:00 AM 0 2/24/2020 12:00:00 AM 1``实际上,我的表包含以下一些日期的数据计数, 02/19/2020 4 02/20/2020 1 02/21/2020 2 02/22/2020 3 02/25/2020 1@Sathishkumar我给了你一个标准的解决方案,按照你想要的格式设置日期。使用你自己的桌子!