SQL:如何获得足够多的事件以使我至少有50个事件

时间:2018-08-11 23:09:41

标签: sql postgresql

我有一张桌子。每个事件都有一个日期。我的API要求我在某个日期之前/之后至少返回X个事件,但是我必须返回每个日期的所有事件。 如果我在代码中执行此操作,则可能会按照日期对事件进行分组并按升序/降序进行排序,然后花足够多的时间,这样我至少会有50个事件。

这是我到目前为止所拥有的:

...    从“事件”的位置(日期为       (选择取消日期         来自事件         日期<= 2018-08-12         按日期排序DESC         LIMIT 50))

但是,即使数据库中还有更多事件,它也只返回16个事件。

我认为要实现此目的,我需要做一些事情,例如获取每天的事件计数,然后获取足够的天数以使事件的总和> = X(例如50),然后返回实际事件。 那是怎么做的?以及如何正确编写这样的查询?

1 个答案:

答案 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
                    );