SQL:如何获得足够的事件天数,使我至少有 50 个事件
Posted
技术标签:
【中文标题】SQL:如何获得足够的事件天数,使我至少有 50 个事件【英文标题】:SQL: How to get the enough days of events such that I have at least 50 events 【发布时间】:2018-08-11 23:09:40 【问题描述】:我有一个事件表。每个事件都有一个日期。我的 API 要求我在某个日期之前/之后至少返回 X 个事件,但我必须返回每个日期的所有事件。 如果我在代码中这样做,我会做一些事情,比如按日期对事件进行分组并按升序/降序排序,然后花足够的时间让我至少有 50 个事件。
这是我目前所拥有的:
.... 来自“事件”WHERE(日期在 (选择不同的日期 从事件 日期
但它只返回 16 个事件,即使数据库中有更多事件。
我认为要使其正常工作,我需要执行一些操作,例如获取每天的事件数,然后获取足够的天数,使事件的总和 >= X(例如 50),然后返回实际事件。 那是怎么做的?那么这样的查询应该如何正确编写呢?
【问题讨论】:
【参考方案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
);
【讨论】:
感谢您抽出宝贵时间回复。据我所知,您的查询与我的基本相同,只是您删除了“distinct”关键字,并使子查询将事件称为 e2 而不是 e。但是,我只发布了我让 django 为我生成的查询的主要部分——即查询本身“有效”但没有返回预期的结果。您所做的更改如何解决问题?顺便说一句,我的日期没有时间部分。 @Relman 。 . .正如答案所指出的,如果date
有时间组件,您的查询将不起作用。第二个版本解决了这个问题。
我用我的代码解决了问题:您确认的上述算法是正确的。问题是我的 django 代码进一步过滤了结果并减少了返回结果的列表。以上是关于SQL:如何获得足够的事件天数,使我至少有 50 个事件的主要内容,如果未能解决你的问题,请参考以下文章