我想做一个MySQL查询,它从给定偏移量的单个表中选择给定数量的行,如
SELECT * FROM table
WHERE timestamp < '2011-11-04 09:01:05'
ORDER BY timestamp DESC
LIMIT 100
我的问题是,如果结果中包含一天中的一行,我总是希望一天内所有行。 用例如结果是没有问题的。 102行而不是100行
我能用单个SQL语句实现这个吗?
感谢您的帮助!
答案 0 :(得分:5)
这似乎适用于我的系统:
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 :(得分:1)
如果我正确理解了您的问题,您有兴趣检索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
答案 2 :(得分:0)
排除查询中的时间部分并删除LIMIT。
SELECT * FROM table
WHERE timestamp < '2011-11-04 00:00:00'
ORDER BY timestamp DESC