ORDER BY限制的SQLite查询

时间:2018-06-01 13:47:11

标签: sqlite

我有下表:

date       |  id
-----------|------
unixtime_1 |  2
unixtime_1 |  7
unixtime_1 |  9
unixtime_1 |  24
unixtime_1 |  29
unixtime_1 |  21
unixtime_2 |  8

到目前为止,我从这样的表中得到了结果:

SELECT date, id FROM table ORDER BY date DESC, id ASC

我得到了

unixtime_1 |  2
unixtime_1 |  7
unixtime_1 |  9
unixtime_1 |  21
unixtime_1 |  24
unixtime_1 |  29
unixtime_2 |  8

我想知道我是否可以LIMIT结果,以便在id=1-10 id=11-20id=21-30范围内我只能在结果中获得ID较高的记录。 所以:

unixtime_1 |  9
unixtime_1 |  29

因为id range=11-20没有任何记录,所以应该跳过范围。 现在的范围是1-10,11-20,21-30,但我是根据用户请求设置的自定义范围,所以我应该可以更改它们

这可以通过查询吗?

谢谢

3 个答案:

答案 0 :(得分:1)

您的最新要求应该只能通过按日期和(id - 1) / <some_number>进行分组来实现,在您的示例中<some_number>将为10。

SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT date, (id - 1) / 10 AS id_grp, MAX(id) AS max_id
    FROM yourTable
    GROUP BY date, (id - 1) / 10
) t2
    ON t1.date = t2.date AND t1.id = t2.max_id
ORDER BY
    t1.date, t1.id;

您只需将我的查询中的10替换为范围的结尾,即可选择您想要的任何范围1 - num

答案 1 :(得分:0)

如果我确实理解正确,并且你的范围是id = 1-3

你可以这样做:

SELECT id, date FROM table WHERE id>=1 AND id<=3 ORDER by id DESC, date DESC limit 1;

这将只为您提供id = 1-3范围内id最高的1条记录。

您可以存储它并对另一个范围执行另一个查询并稍后将它们组合

答案 2 :(得分:0)

试试这个:

  

SELECT日期,MAX(ID)FROM表GROUP BY日期