我有一个数据库与CreatedDate是存储在Unix时代的时间和其他一些信息。我想要一个查询,以便能够检索最新的2周记录的基础上的最后一次记录。下面是示例的一部分
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日的记录。
我不知道如何比较才能得到最新的数据?任何建议
发布于 2016-06-29 01:53:55
这似乎很奇怪,但您需要执行两个查询--一个是查找最大日期,然后删除14天--然后将其用作请求表的条件。我使用了ID_NUM,因为ID是Oracle中的一个保留字,可能还有其他关系数据库管理系统。
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)发布于 2016-06-29 01:22:14
最简单的方法可能是从今天的日期/时间减去两个星期:
where CreatedDate >= UNIX_TIMESTAMP() - 7*24*60*60另一种方法是将值转换为日期/时间:
where from_unixtime(CreatedDate) >= date_sub(now(), interval 2 week)这种方法的优点是更容易与天相一致。所以,如果你想从午夜开始两周:
where from_unixtime(CreatedDate) >= date_sub(curdate(), interval 2 week)缺点是列上的函数阻止在该列上使用索引。
编辑:
你的问题绝对不是这么说的。但在这种情况下,您应该使用:
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);https://stackoverflow.com/questions/38088767
复制相似问题