【发布时间】: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 也没有包含在输出中?)