0

我有一张桌子,上面有像

TimeStamp     |  Feild1      | Feild 2
--------------------------------------
1902909002    |  xyddtz      | 233447
1902909003    |  xytzff      | 233442
1902909005    |  xytzdd      | 233443
1902909007    |  xytzdd      | 233443
1902909009    |  xytsqz      | 233436

现在我想查询它并获取 1902909002 和 1902909007 之间的记录,这很容易完成:

Select * from table where timestamp > 1902909001 AND timestamp < 1902909008

但我想做的另外两件事是:

  1. 也许那个特定的时间戳不存在所以我必须找到最接近的值
  2. 就像该范围内有 200 条记录但我只想获取 20 条,所以我想连续跳过每 19 条记录并获取第 20 条、第 40 条等记录。
  3. 我将有日期时间格式的日期。我知道我可以在查询之前对其进行转换,但如果查询本身有一些选项,那么它会更好。
4

2 回答 2

1

试试这个查询

select * from(
select @rn:=if(@rn < rid, rid, @rn) as rn,  rid, timestamp, feild1, feild2
from 
(select @rn:=@rn+1 as rId, tbl.* 
from tbl
join
(select @rn:=0) tmp
where timestamp between 1902909002 and 1902909024 order by rid desc)a
join
(select @rn:=0)tmp)tmp
where rid%(rn div 6)=0

SQL 小提琴

于 2013-05-28T07:37:28.010 回答
0

试试这个(在同一个 mysql 会话中执行两个查询至关重要):

SET @c:=0;
SELECT
    *
FROM (
    SELECT 
        * ,
        @c:=@c+1  as counter
    FROM 
        table 
    WHERE 
        timestamp > 1902909001 
        AND timestamp < 1902909008
) as tmp
WHERE
    counter % 20 =1;
于 2013-05-28T07:44:43.983 回答