【问题标题】:How to select a range of dates from a different range of date fields如何从不同的日期字段范围中选择一个日期范围
【发布时间】:2017-06-19 20:17:35
【问题描述】:

我想为另一个日期范围内的日期范围选择数据

我有下表

ID  FNAME  LNAME  BEG_EPISODE_DT  END_EPISODE_DT    TRGT_DT
 1  John    G        12/20/16        02/11/17       03/31/17
 2  King    R        11/10/16        12/25/17       03/31/17
 3  Bundt   H        10/19/16        01/16/17       03/31/17
 4  Smith   F        02/16/16        04/08/17       03/31/17

以上数据显示了每个人的情节。剧集是指从剧集开始(BEG_EPISODE_DT)到剧集结束(END_EPISODE_DT)的持续时间

我需要选择数据,使每个人的剧集位于目标日期 (TRGT_DT) 之前的 3 个月内,即剧集(BEG_EPISODE_DT 或 END_EPISODE_DT)应位于 2017 年 3 月 31 日到 3 个月之前

我正在尝试使用以下逻辑。但我不能让它工作

select * from mytable 
BEG_EPISODE_DT between ((ADD_MONTHS(TRGT_DT,-3), TRGT_DT) or 
END_EPISODE_DT between ((ADD_MONTHS(TRGT_DT,-3), TRGT_DT) or 
BEG_EPISODE_DT = (ADD_MONTHS(TRGT_DT,-3) or TRGT_DT) or
END_EPISODE_DT = (ADD_MONTHS(TRGT_DT,-3) or TRGT_DT)

我正在寻找以下结果

ID  FNAME  LNAME  BEG_EPISODE_DT  END_EPISODE_DT    TRGT_DT
 1  John    G        12/20/16        02/11/17       03/31/17
 3  Bundt   H        10/19/16        01/16/17       03/31/17
 4  Smith   F        02/16/16        04/08/17       03/31/17

感谢您的帮助

编辑:BEG_EPISODE_DT 或 END_EPISODE_DT 可以等于 TRGT_DT 或(TRGT_DT - 3 个月)

【问题讨论】:

  • 虽然Oracle确实买了mysql,但在软件层面上它们仍然是不同的产品。
  • 我不明白这个解释。如果 BEG_EPISODE_DT 或 END_EPISODE_DT(或者可能两者兼有)在 2017 年 1 月 1 日到 2017 年 3 月 31 日之间,是否应该包含 TRGT_DT = 03/31/17 的行?请注意,2017 年 1 月 1 日不是 2017 年 3 月 31 日之前的三个月(即 2016 年 12 月 31 日)。除此之外,不清楚为什么要减去两个月而不是三个月,那么从任何东西中减去 0 的意义何在。也完全不清楚你为什么截断到月初 - 在你的逻辑中绝对没有提到这一点。请澄清。
  • 请在 mathguy 的回答下查看 Jair 的问题... Smith 包含在“期望的输出”中吗?开始日期和结束日期均不在 2016 年 12 月 31 日和 2017 年 3 月 31 日之间。还是您的意思有所不同-您不希望特定的开始日期或结束日期在该时间间隔内,而是“剧集”的任何部分与该时间间隔至少有一天相同? (如果是这样,那么为什么 King 也没有包含在输出中?)

标签: sql oracle date select


【解决方案1】:

您缺少用于 WHERE 子句的关键字 WHERE。除此之外,BETWEEN 语法要简单得多。类似的东西:

where    beg_episode_dt between add_months(trgt_dt, -3) and trgt_dt
      or end_episode_dt between add_months(trgt_dt, -3) and trgt_dt

【讨论】:

  • 我也是这么想的,但是这个谓词排除了 Hemansh 包含在他想要的结果中的“Smith”,所以要么这不是他正在寻找的解决方案,要么他错误地将 Smith 列为一个积极的结果。我错了吗?
  • 你说得对,我没听懂。 'Smith' 违反了 OP 用简单英语解释的规则。我将添加为评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多