我有一张桌子。每个事件都有一个日期。我的API要求我在某个日期之前/之后至少返回X个事件,但是我必须返回每个日期的所有事件。 如果我在代码中执行此操作,则可能会按照日期对事件进行分组并按升序/降序进行排序,然后花足够多的时间,这样我至少会有50个事件。
这是我到目前为止所拥有的:
... 从“事件”的位置(日期为 (选择取消日期 来自事件 日期<= 2018-08-12 按日期排序DESC LIMIT 50))
但是,即使数据库中还有更多事件,它也只返回16个事件。
我认为要实现此目的,我需要做一些事情,例如获取每天的事件计数,然后获取足够的天数以使事件的总和> = X(例如50),然后返回实际事件。 那是怎么做的?以及如何正确编写这样的查询?
答案 0 :(得分:1)
此代码应该有效:
select e.*
from events e
where date in (select e2.date
from events e2
where e2.date <= '2018-08-12'
order by e2.date desc
limit 50
);
它不起作用的原因之一是,date
确实有时间成分。如果是这种情况,则强制转换值将解决问题:
select e.*
from events e
where date::date in (select e2.date::date
from events e2
where e2.date <= '2018-08-12'
order by e2.date desc
limit 50
);