如果表中的日期时间列在特定时间段内,则根据记录计数

Posted

技术标签:

【中文标题】如果表中的日期时间列在特定时间段内,则根据记录计数【英文标题】:Getting count of records on the basis if datetime column in table for certain period of time 【发布时间】:2017-03-10 11:54:36 【问题描述】:

我有一个名为 Forms 的表,我们在其中存储多行。 表单表有列FormId(uniqueidentifier),FormName(varchar(max)),SubmitedDate(datetime),HasValidFields(bit),IsValidRecord(bit)。 我正在使用实体框架 6。 使用 api 用户可以查询最近 24 小时、最近 7 天、最近 30 天或最近 12 个月的记录。 对于不同的查询,我通过读取列IsValidRecord(bit) 的值来返回那些请求的天/月的有效记录数 对于每个查询,我必须使用列 HasValidFields(bit) 返回具有 HasValidFields 的记录数。

由于该表中的记录很多,那么提高性能的方法是什么? 我应该只使用 EF 查询还是我们应该使用 view 或使用索引? 记录表:

 FormId                               FormName  SubmitedDate    HasValidFields  IsValidRecord
F3999F60-57B4-494C-868F-331EE5DC6A5F    Form1   10/4/16 11:51   1                 1
9C23FFC0-F5C9-4E52-B272-34F75D8B4EE6    Form13  10/4/16 11:51   0                 1
0658B103-D7B5-4C9E-8209-7BAB82C0E35E    Form12  10/4/16 11:51   1                 1
2C348300-7FD2-471E-8DA4-D7E0DD4B53EE    Form18  10/4/16 11:51   1                 0
F3999F60-57B4-494C-868F-331EE5DC6A5F    Form13  10/5/16 5:24    1                 0
0664C797-0CDF-443C-8ABE-E497E72BE738    Form19  10/5/16 5:24    1                 1
F3999F60-57B4-494C-868F-331EE5DC6A5F    Form12  10/5/16 5:24    0                 1
9C23FFC0-F5C9-4E52-B272-34F75D8B4EE6    Form15  10/5/16 5:24    0                 1
DAF34CEB-F7F6-4386-829C-D0D76E4E657D    Form16  10/5/16 5:43    1                 1
9C23FFC0-F5C9-4E52-B272-34F75D8B4EE6    Form17  10/5/16 5:43    1                 1

过去 7 天的样本输出(不是基于上述样本输入)

日期 有效记录

27-Oct-16 12

26-Oct-16 40

25-Oct-16 12

24-Oct-16 41

16 年 10 月 23 日 19 日

22-Oct-16 46

21-Oct-16 56

对于最后几个小时,它将是小时列而不是日期,对于年份,它将是年份列。

【问题讨论】:

如果我们看不到起始数据是什么,那么示例输出数据也无济于事。 哪个是合适的方法我不知道。一方面,我们不知道您当前的方法和性能。要求合适的方法太宽泛了。 【参考方案1】:

您应该在 SubmittedDate 和 HasValidFields 上添加一个索引(即一个使用两列的索引)。

我认为实体框架不会为您生成索引,尽管您可以使用属性为实体框架添加索引(如果进行代码优先设计)。

【讨论】:

以上是关于如果表中的日期时间列在特定时间段内,则根据记录计数的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 触发器检查一个表中的课程持续时间,如果课程是特定日期,则阻止更新

java - 如何检查JDBC表中的某些列在Java中是不是为空

一周内不同的日期计数

ms-access:仅显示特定日期内记录的报告

根据表中的实例数限制数据输入

如果用户从表中删除记录,则刷新 Access 表单文本框