当前位置: 首页 > 面试题库 >

SQL日期间隔查询

张晨朗
2023-03-14
问题内容

我正在管理事件数据库。每个事件都有开始和结束时间戳记(INT, unix timestamp)。

目前,我可以通过一个SQL查询执行以下操作:

  • 建立日历,并记下发生事件的日期
  • 列出给定日期(YYYY / MM / DD,YYYY / MM)中发生的事件

问题是当一个事件跨越几天时,我无法在它的开始和结束时间戳之间的日期列出它。

例如:

活动开始于2011/05/25和结束于2011/05/27,但我无法在页面2011/05/26上列出。

我实际的SQL查询是

SELECT * FROM `event` 
WHERE (`start` BETWEEN ? AND ?) OR (`end` BETWEEN ? AND ?) 
ORDER BY start ASC

根据给定的参数类型(整月或特定日期)自动计算两个绑定参数(unix时间戳)

是否有可能在两个端点之间的一天之间的一天中发生这些事件(跨越几天)?

如果可以澄清我的问题,请告诉我。

更新

例子:

event start: 1309125660 (2011-06-27 00:01:00)
end end: 1314050340 (2011-08-22 23:59:59)

select start: 1312408860 (2011-08-04 00:01:00)
select end: 1312495199 (2011-08-04 23:59:59)

当我尝试列出发生在2011/08/4的事件时,此事件不会出现


问题答案:

如果我提出的问题正确,并且[:start, :end]是您感兴趣的日期范围,那么您正在寻找:

select *
 from event
where -- event started earlier, ends later
      start <= :start and :start <= end
   or -- event starts during [:start, :end]
      :start <= start and start <= :end
   or -- event ends during [:start, :end]  
      :start <= end and end <= :end;

如果您要查找特定内容:day,请使用:dayas:start:day + 1 dayas :end



 类似资料:
  • 问题内容: 假设我在Sql Server 2008中具有下表: 如您所见,该表具有StartDate和EndDate列。我想验证这些列中的数据。间隔不能相互冲突。因此,上面的表是有效的,但是下一个表是无效的,因为第一行的结束日期大于第二行的StartDate。 在这里表示无穷大。 您能帮我写一个脚本进行数据验证吗? [第二项任务] 感谢您的回答。我很复杂。假设我有这样的表: 在这里,我想验证一组中

  • 问题内容: 我有一个包含2个字段的表:唯一ID,用户ID(外键)和日期时间。这是对服务的访问日志。我在SQL Server中工作,但我希望得到不可知论的答案。 我想使用SQL为最长间隔开始的特定用户查找ID。 因此,举例来说,假设我的值如下(为一位用户简化): 如果我搜索用户1的最长间隔,我将得到ID 2(也可以在那儿获得间隔的长度,但不那么关键)。 在SQL中最有效的方法是什么? 注意:ID不一

  • 问题内容: 我想创建一个Ecto查询,该查询按表的年龄(即“最小年龄(月)->最大年龄(月)”)过滤表中的记录。 一种简单的方法是Ecto功能: 这样做的问题是,并非所有孩子都在同一时区,当然也不是所有孩子都在同一时区。该查询将非常接近,但没有发现(有些会在一天之内关闭)。 我一直在尝试使用PostgreSQL的功能来使此查询工作。我可以使用SQL客户端使其正常工作,但是在尝试对片段中的值进行插值

  • 问题内容: 我有两张表。 带有客户和日期的订单表。数据仓库中的日期维度表。 订单表并不包含给定月份中每个日期的活动,但是我需要返回一个填充日期和客户缺口的结果集。 例如,我需要这个: 看起来像这样: 这似乎是一个左外部联接,但它没有返回预期的结果。这是我正在使用的内容,但这并没有按预期返回日期表中的每个日期。 问题答案: 问题是您需要所有日期的所有客户。当您执行时,customer字段将为NULL

  • 问题内容: 我在使用Excel和Access数据库在VBA中进行sql查询时遇到问题。在mi VBA代码中,我有两个具有以下内容的数据变量: DateMin = 31/07/2014 22:00:00 DateMax = 01/08/2014 06:00:00 而且我有一个访问数据库,其中包含许多带有日期字段的数据。我试图从数据库中提取两个变量之间具有日期的数据,并对此进行编码: 但是不起作用。结

  • 问题内容: 我有一个和。我想获取这两个日期之间的日期列表。谁能帮助我指出查询中的错误。 这是一个变量。 问题答案: 您应该将这两个日期放在单引号之间,例如。 或可以使用 请记住,第一个日期是包含日期,但第二个日期是排除日期,因为它实际上是“ 2011/02/27 00:00:00”