sql - 如何查找两个日期日期之间的特定记录

标签 sql

假设我有一个 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/

相关文章:

javascript - PHP 不会发布值表

sql - 如何选择每个项目具有最大时间戳的行集?

联系远程主机的 MySQL 源命令

sql - 在 postgresql 中,当 case 语句为 true 时添加条件

mysql - 创建包含两个表的 View ,其中第二个表没有唯一 ID

java - 有没有办法对我的 JPQL 查询尝试的 WHERE 条件进行排序?

mysql - 约束和索引中的命名约定

SQL:返回一周中的星期一不在星期日工作

MySQL Multi DELETE 如果与外键存在关系

mysql - Ruby on Rails 在单个查询中更新多个记录