我有一张有栏的桌子
索引,日期
其中一个索引可能有多个日期,而我的目标是:选择一个看起来像这样的列表
索引,最小日期,最大日期
其中每个索引仅列出一次,而MinDate(MaxDate)代表该索引在整个表格中出现的最早(最新)日期。这很容易,但是让我们限制此列表仅显示给定日期范围内的索引。
到目前为止,我有以下内容:
SELECT Index, MIN([Date]), MAX([Date]) FROM myTable WHERE Index IN (SELECT Index From myTable WHERE [Date] BETWEEN '1/1/2000' AND '12/31/2000') GROUP BY Index ORDER BY Index ASC 这太慢了。有什么办法可以加快速度吗?
问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
我建议使用派生表方法。像这样:
SELECT myTable.Index, MIN(myTable.[Date]), MAX(myTable.[Date]) FROM myTable Inner Join ( SELECT Index From myTable WHERE [Date] BETWEEN '1/1/2000' AND '12/31/2000') As AliasName On myTable.Index = AliasName.Index GROUP BY myTable.Index ORDER BY myTable.Index ASC 编辑:经过进一步审查,还有另一种方法可以创建此查询。以下查询可能更快,更慢或在相同的时间内执行。当然,这取决于表的索引方式。
Select [Index], Min([Date]), Max([Date]) From myTable Group By [Index] Having Sum(Case When [Date] Between '1/1/2000' And '12/31/2000' Then 1 Else 0 End) > 0 在最佳情况下,此查询将导致索引扫描(而不是查找)过滤掉您不想显示的行。我鼓励您同时运行两个查询,并选择最快的速度执行。