4SQL - 查询选择日期范围

时间:2015-04-01 09:13:00

标签: sql sql-server

我有2个表,一个是表A,它存储Resources Assign工作一段时间。结构如下

Name      StartDate                    EndDate
 Tan       2015-04-01 08:30:00.000     2015-04-01 16:30:00.000
 Max       2015-04-01 08:30:00.000     2015-04-01 16:30:00.000
 Alan      2015-04-01 16:30:00.000     2015-04-02 00:30:00.000

第二个表B存储项目处理时间。结构如下

 Item    ProcessStartDate            ProcessEndDate
 V       2015-04-01 09:30:10.000     2015-04-01 09:34:45.000
 Q       2015-04-01 10:39:01.000     2015-04-01 10:41:11.000
 W       2015-04-01 11:44:00.000     2015-04-01 11:46:25.000
 A       2015-04-01 16:40:10.000     2015-04-01 16:42:45.000
 B       2015-04-01 16:43:01.000     2015-04-01 16:45:11.000
 C       2015-04-01 16:47:00.000     2015-04-01 16:49:25.000

我需要选择在2015-04-01 16:40:00和2015-04-01 17:30:59处理的项目。除此之外,我需要知道在这段时间内分配了多少资源来处理项目。我只知道开始日期是2015-04-01 16:00:00,结束日期是2015-04-01 17:30:59。我如何从两个表中选择数据。不需要JOIN,只需要单独选择。

另一个项目处理时间是2015-04-01 10:00:00和2015-04-04 11:50:59。

预期的结果是

   Name      StartDate                    EndDate
   Alan      2015-04-01 16:30:00.000     2015-04-02 00:30:00.000

   Item    ProcessStartDate            ProcessEndDate
   A       2015-04-01 16:30:10.000     2015-04-01 16:32:45.000
   B       2015-04-01 16:33:01.000     2015-04-01 16:35:11.000
   C       2015-04-01 16:37:00.000     2015-04-02 16:39:25.000

情景2预期结果

   Name      StartDate                    EndDate
   Tan       2015-04-01 08:30:00.000     2015-04-01 16:30:00.000
   Max       2015-04-01 08:30:00.000     2015-04-01 16:30:00.000

    Item    ProcessStartDate            ProcessEndDate     
    Q       2015-04-01 10:39:01.000     2015-04-01 10:41:11.000
    W       2015-04-01 11:44:00.000     2015-04-01 11:46:25.000

我已修改了一点要求。 请帮助。

1 个答案:

答案 0 :(得分:0)

这应该有效:

select *
from tableB
where ProcessStartDate>'2015-04-01 16:00:00' 
      and 
      ProcessEndDate<'2015-04-01 17:30:59'

要获得tableA的结果,您有两个选项,具体取决于您需要做什么。

  • 他们没有联系,做同样的事情。 (改为tableA)
  • 它们已连接,您需要在它们之间使用一个键,并从tableA中选择与那些ProcessDates对应的适当部分。