我有下表:
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-20
和id=21-30
范围内我只能在结果中获得ID较高的记录。
所以:
unixtime_1 | 9
unixtime_1 | 29
因为id range=11-20
没有任何记录,所以应该跳过范围。
现在的范围是1-10,11-20,21-30,但我是根据用户请求设置的自定义范围,所以我应该可以更改它们。
这可以通过查询吗?
谢谢
答案 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日期