首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询以检索最新的2周记录

SQL查询以检索最新的2周记录
EN

Stack Overflow用户
提问于 2016-06-29 01:19:21
回答 2查看 364关注 0票数 0

我有一个数据库与CreatedDate是存储在Unix时代的时间和其他一些信息。我想要一个查询,以便能够检索最新的2周记录的基础上的最后一次记录。下面是示例的一部分

代码语言:javascript
复制
ID   User       Ranking     CreatedDate
-------------------------------------------------------
1   B.Sisko       1        1461136714  
2   B.Sisko       2        1461123378
3   B.Sisko       3        1461123378
4   B.Sisko       3        1461600137
5   K.Janeway     4        1461602181
6   K.Janeway     4        1461603096
7   J.Picard      4        1461603096

最后一张唱片CreatedDate是2016年4月25日,所以我想要从4月12日到4月25日的记录。

我不知道如何比较才能得到最新的数据?任何建议

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-29 01:53:55

这似乎很奇怪,但您需要执行两个查询--一个是查找最大日期,然后删除14天--然后将其用作请求表的条件。我使用了ID_NUM,因为ID是Oracle中的一个保留字,可能还有其他关系数据库管理系统。

代码语言:javascript
复制
    SELECT ID_NUM, USER, RANKING,
    TO_DATE('19700101000000', 'YYYYMMDDHH24MISS')+((CreatedDate-18000)
    /(60*60*24)) GOOD_DATE
    FROM MY_TABLE
    WHERE
    GOOD_DATE >=
    (SELECT MAX( TO_DATE('19700101000000', 'YYYYMMDDHH24MISS')+
    ((CreatedDate-18000) /(60*60*24))) -14
    FROM MY_TABLE)
票数 0
EN

Stack Overflow用户

发布于 2016-06-29 01:22:14

最简单的方法可能是从今天的日期/时间减去两个星期:

代码语言:javascript
复制
where CreatedDate >= UNIX_TIMESTAMP() - 7*24*60*60

另一种方法是将值转换为日期/时间:

代码语言:javascript
复制
where from_unixtime(CreatedDate) >= date_sub(now(), interval 2 week)

这种方法的优点是更容易与天相一致。所以,如果你想从午夜开始两周:

代码语言:javascript
复制
where from_unixtime(CreatedDate) >= date_sub(curdate(), interval 2 week)

缺点是列上的函数阻止在该列上使用索引。

编辑:

你的问题绝对不是这么说的。但在这种情况下,您应该使用:

代码语言:javascript
复制
select t.*
from t cross join
     (select from_unixtime(max(CreatedDate)) as maxcd from t) m
where from_unixtime(CreatedDate) >= date_sub(maxcd, interval 2 week);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38088767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档