假设我有一个 Gigantic 表,以这种格式保存大量从时间开始的日志:
==========================================================
| Name | Log | Date (type datetime) |
----------------------------------------------------------
| Bob | {Some:[sort,of,json]} | 1-May-2013 09:12:45 |
| Josh | {Another:[sort,of,json]} | 1-May-2013 09:13:45 |
| Fred | {Yada:[yada,yada,yada]} | 1-May-2013 09:14:45 |
| Josh | {Ahoy:[whee,whee,whee]} | 1-May-2013 09:15:45 |
| Lucy | {Ahem:[blagh,blgh,blgh]} | 1-May-2013 09:16:45 |
| Bob | {Chih:[aw,ew,ow]} | 2-May-2013 09:12:45 |
..........................................................
| Fred | {Cheh:[saw,sew,sow]} | 1-May-2014 09:12:45 |
| Bob | {Chah:[waw,wew,wow]} | 1-May-2014 09:15:45 |
==========================================================
现在,给定两个日期时间,我需要在这些日期时间之间为每个人获取一份日志(该时间内的任何日志都可以,但最好是这两个日期时间中最早的日志)。
这是我试过的查询,但仍然需要很长时间
select *
from ( select Name,
Log,
rank() over (partition by Name order by Date asc) ranks
from Table ) alias
where ranks = 1
最佳答案
你必须使用BETWEEN
SELECT *
FROM (
SELECT Name, Log,
rank() OVER (partition by Name ORDER by Date ASC) ranks
FROM Table
WHERE Date BETWEEN '2012-04-01 02:00:00′ AND '2012-04-20 02:00:00′
) alias
WHERE ranks = 1;
您可能必须在您正在使用的字段上创建 INDEX
以加速查询的执行。
关于sql - 如何查找两个日期日期之间的特定记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20854446/