MySQL запрос для сортировки по времени и возврат n строк после указанного c id - PullRequest
1 голос
/ 05 августа 2020

У меня есть таблица в моей базе данных (версии: MariaDB 10.3.17, MySQL 5.7) следующим образом:

id      name        timestamp
-----------------------------
154875  AXC         154875869
362574  RTB         154875800
962548  MNV         154875969
365847  XRT         154875123
...

то, что мне нужно:

  1. сортировать строк с меткой времени по убыванию
  2. , затем вернуть 24 строки после (ниже), где id = something

, например, для id = 962548 первые 3 строки ожидаемого вывода будут:

id      name        timestamp
-----------------------------
154875  AXC         154875869
362574  RTB         154875800
365847  XRT         154875123

как это реализовать в MySQL?

Ответы [ 3 ]

2 голосов
/ 05 августа 2020

Присоединитесь к запросу, который возвращает строку с id = something в таблицу при ваших условиях:

select t.*
from tablename t 
inner join (select * from tablename where id = 365847) c
on t.timestamp < c.timestamp or (t.timestamp = c.timestamp and t.id < c.id)
order by t.timestamp desc, t.id desc
limit 24

, но я не уверен, что вы имеете в виду под ниже , так что, возможно, вам нужен обратный порядок:

select t.*
from tablename t 
inner join (select * from tablename where id = 365847) c
on t.timestamp > c.timestamp or (t.timestamp = c.timestamp and t.id > c.id)
order by t.timestamp desc, t.id desc
limit 24
0 голосов
/ 05 августа 2020

Я бы запросил что-то вроде этого:

SELECT * FROM tab
WHERE timestamp >= (SELECT timestamp FROM tab WHERE id = 154875)
AND id <> 154875
ORDER BY timestamp DESC,  id DESC
LIMIT 2
0 голосов
/ 05 августа 2020

Вам нужно выбрать элементы, значение временной метки которых больше, чем ваша временная метка id, используя следующий запрос:

SELECT * 
FROM table 
WHERE timestamp>(select timestamp 
                 from table
                 where id = 'current_id') 
ORDER BY timestamp LIMIT 24;
...