表格加入大于和小于

时间:2018-06-01 06:37:40

标签: sql

我有一个工作订单表,如下所示,我需要将此表与一个班次表联系起来,以根据工单的时间检索工单所属的班次名称。

    Date    TimeOfEntry Plant   ManufacturingLine   OrderNumber
2017-06-13  11:56:58    3120    D19 100015234
2017-06-13  12:12:18    3120    MIX 100016098
2017-06-13  12:17:59    3120    D16 100015218
2017-06-13  12:21:01    3120    D19 100015234
2017-06-13  12:22:23    3120    D19 100016017
2017-06-13  12:43:52    3120    WW2 100015543
2017-06-13  12:45:49    3120    WW2 100015543
2017-06-13  13:00:26    3120    W43 100015574
2017-06-13  13:01:51    3120    PRE 100016148
2017-06-13  13:05:53    3120    MIX 100016095

    ----------------Shifts--------------------------

    Plant   Shift   StartTime   EndTime
    3101    Day         06:01:00.0000000    14:00:00.0000000
    3120    Day         06:01:00.0000000    14:00:00.0000000
    3150    Day         06:01:00.0000000    14:00:00.0000000
    3160    Day         06:01:00.0000000    14:00:00.0000000
    3170    Day         06:01:00.0000000    14:00:00.0000000
    3101    Afternoon   14:01:00.0000000    22:00:00.0000000
    3120    Afternoon   14:01:00.0000000    22:00:00.0000000
    3150    Afternoon   14:01:00.0000000    22:00:00.0000000
    3160    Afternoon   14:01:00.0000000    22:00:00.0000000
    3170    Afternoon   14:01:00.0000000    22:00:00.0000000
    3101    Night       22:01:00.0000000    06:00:00.0000000
    3120    Night       22:01:00.0000000    06:00:00.0000000
    3150    Night       22:01:00.0000000    06:00:00.0000000
    3160    Night       22:01:00.0000000    06:00:00.0000000
    3170    Night       22:01:00.0000000    06:00:00.0000000

我想要使用的逻辑是If(TimeOfEntry介于Shift.StartTime和ShiftFinishTime之间)然后是Shift.Shift。

知道我该怎么办?提前谢谢。

1 个答案:

答案 0 :(得分:0)

由于夜班,这很棘手。

您可以使用select wo.*, s.shift from workorders wo join shifts s on wo.plant = s.plant and ((s.starttime < s.endtime and TimeOfEntry between s.starttime and s.endtime ) or (s.starttime > s.endtime and TimeOfEntry not between s.endtime and s.starttime ) ); ,但使用特殊逻辑:

array