我有一个包含日期时间列“CreationDate”的记录表。
我需要获取过去90天每的以下信息:
我当然可以通过一个计数循环来做到这一点,但是这会对数据库造成90次...有没有更好的方法来做这个聚合而不必用数据库来处理请求?
我正在使用C#,LINQ,SQL Server 2008。
答案 0 :(得分:3)
你在找这样的东西吗?
WITH CTE AS
(SELECT COUNT(*) OVER () AS TotalCount,
CAST(CONVERT(VARCHAR, CreationDate, 101) as DATETIME) as DateValue, *
FROM MyTable
WHERE CreationDate >= DATEADD(DD, -90, GETDATE())
)
SELECT DateValue, TotalCount, COUNT(*) as RowCount
FROM CTE
group by DateValue, TotalCount
order by DateValue
;
答案 1 :(得分:1)
拉出记录(或只是ids和创建日期,如果这就是你需要的全部内容),然后在代码中执行逻辑。一个SELECT
针对数据库。
回应评论:
您可以使用以下查询获取每天的项目数:
SELECT CreationDate, COUNT(CreationDate) FROM MyTable GROUP BY CreationDate
请注意,这假定CreationDate
中没有时间。如果你有不同的时间,分组将不起作用 - 你必须将它们弄平。
您还可以添加WHERE
子句,仅查看过去90天内的项目。
答案 2 :(得分:0)
将90天的每日总数带回来,然后在您的应用程序中汇总可能是最好的主意。目前没有特别令人满意的方法来计算SQL Server中的运行总计。下面是
sys.objects