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 个事件的主要内容,如果未能解决你的问题,请参考以下文章

如何使我的 C++ 类事件系统成为仅限于类型数组的模板类?

sql 语句:一个字段,连续几天值大于0,获得天数 怎么解决的?请教

在 SQL 中查找事件之间的最小天数

SQL Server 编程 - 按给定天数更新所有日期

SQL 从至少有一个来自异性的表中获得前 3 名

SQL Count 天数到本月的第一天