MySQL выбирает заданное количество строк и всегда выбирает все строки в течение одного дня - PullRequest
1 голос
/ 04 ноября 2011

Я хочу сделать MySQL Query, который выбирает заданное количество строк из одной таблицы из заданного смещения, например

SELECT * FROM table 
WHERE timestamp < '2011-11-04 09:01:05' 
ORDER BY timestamp DESC 
LIMIT 100

Моя проблема в том, что мне всегда нужны все строки в течение дня, если одна строкадня будут включены в результат.Было бы легко получить результат, например, с 102 строками вместо 100

Могу ли я реализовать это с помощью одного оператора SQL?

Спасибо за вашу помощь!

Ответы [ 3 ]

5 голосов
/ 04 ноября 2011

Это похоже на мою систему:

SELECT UserID, Created
FROM some_user
WHERE Created < '2011-11-04 09:10:11'
AND Created >= (
    SELECT DATE(Created) -- note: DATE() strips out the time portion from datetime
    FROM some_user
    WHERE Created < '2011-11-04 09:10:11'
    ORDER BY Created DESC
    LIMIT 99, 1 -- note: counting starts from 0 so LIMIT 99, 1 returns 100th row
)
ORDER BY Created DESC
-- 0 rows affected, 102 rows found. Duration for 1 query: 0.047 sec.

Возможно, есть более быстрая альтернатива.

1 голос
/ 04 ноября 2011

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

SELECT table.* 
FROM table, (
        SELECT DISTINCT day 
        FROM (
            SELECT TO_DAYS(timestamp) day 
            FROM table 
            WHERE timestamp < :? 
            LIMIT 100
            )
    ) days
WHERE TO_DAYS(table.timestamp) = days.day 
ORDER BY timestamp
0 голосов
/ 04 ноября 2011

Исключить временную часть в запросе и удалить LIMIT.

SELECT * FROM table 
WHERE timestamp < '2011-11-04 00:00:00' 
ORDER BY timestamp DESC 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...