一次执行多个聚合(SQL,LINQ)..还是具有更好的性能?

时间:2010-07-29 04:29:15

标签: c# sql sql-server linq-to-sql sql-server-2008

我有一个包含日期时间列“CreationDate”的记录表。

我需要获取过去90天的以下信息:

  • 总共存在多少条记录
  • 当天添加了多少条记录

我当然可以通过一个计数循环来做到这一点,但是这会对数据库造成90次...有没有更好的方法来做这个聚合而不必用数据库来处理请求?

我正在使用C#,LINQ,SQL Server 2008。

3 个答案:

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