【问题标题】:Query to Get Accounts doesn't collide with Date range获取帐户的查询与日期范围不冲突
【发布时间】:2019-05-06 22:51:00
【问题描述】:

Accounts 表包含字段 Accounts、startdate 和 enddate。同一个帐户将有不同的开始日期和结束日期。 我需要获得同一日期范围内的帐户。

表格

+----------+-----------+------------+
| Account  | StartDate |  Enddate   |
+----------+-----------+------------+
| T001     | 1/1/2018  | 6/30/2018  |
| T001     | 7/1/2018  | 12/31/2018 |
| T002     | 1/1/2018  | 6/1/2018   |
| T002     | 7/1/2018  | 12/31/2018 |
| T002     | 4/1/2018  | 6/5/2018   |
+----------+-----------+------------+

预期

+----------+-----------+------------+
| Account  | StartDate |  Enddate   |
+----------+-----------+------------+
| T002     | 1/1/2018  | 6/1/2018   |
| T002     | 7/1/2018  | 12/31/2018 |
| T002     | 4/1/2018  | 6/5/2018   |
+----------+-----------+------------+

此处 T002 帐户日期范围发生冲突。

【问题讨论】:

  • 我删除了不兼容的数据库标签。请仅使用您真正使用的数据库进行标记。您需要的逻辑也很不清楚。为什么不直接使用where account = 'T002'?你说的日期范围是多少?
  • 为什么不T1?帐户T1 也与T2 发生冲突。对我来说,不清楚您所说的 我需要获取同一日期范围内的帐户是什么意思。

标签: sql


【解决方案1】:
SELECT t1.*
FROM account_table t1 
INNER JOIN account_table t2 
ON t1.Account=t2.Account 
AND t1.StartDate<t2.EndDate 
AND t1.EndDate>t2.StartDate 
AND t1.StartDate<>t2.StartDate;

这将获取所有具有重叠日期范围的帐户。

【讨论】:

    猜你喜欢
    • 2018-07-01
    • 2011-02-12
    • 2017-08-05
    • 1970-01-01
    • 2014-06-27
    • 2023-04-02
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    相关资源
    最近更新 更多