Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从中返回项目的持续时间';存储事务,SQL_Sql_Sql Server_Join_Transactions_Many To Many - Fatal编程技术网

从中返回项目的持续时间';存储事务,SQL

从中返回项目的持续时间';存储事务,SQL,sql,sql-server,join,transactions,many-to-many,Sql,Sql Server,Join,Transactions,Many To Many,(再次发布,上一次发布未包含传出内容,被否决) 形势 有两个进站和一个出站。项目被扫描进和扫描出。我需要知道一件物品在车站里有多长时间。让我们把“站内”看作是进入日期扫描和外出日期扫描之间的时间。p> 问题 一个项目可以(意外地)多次扫描到任何一个站点(为此,我想确定是否在同一天进行了扫描(不看时间),然后返回扫描的最早时间) 一个项目可以从站点多次进出(多次进出扫描) 如果一个项目被扫描到两个传入位置,则需要获得最早的时间 数据样本 ╔═════════╦════════╦══════════

(再次发布,上一次发布未包含传出内容,被否决)

形势

有两个进站和一个出站。项目被扫描进和扫描出。我需要知道一件物品在车站里有多长时间。让我们把“站内”看作是进入日期扫描和外出日期扫描之间的时间。p> 问题

  • 一个项目可以(意外地)多次扫描到任何一个站点(为此,我想确定是否在同一天进行了扫描(不看时间),然后返回扫描的最早时间)

  • 一个项目可以从站点多次进出(多次进出扫描)

  • 如果一个项目被扫描到两个传入位置,则需要获得最早的时间

  • 数据样本

    ╔═════════╦════════╦══════════════════╦════════════════╦══════════╗
    ║ Row_num ║ ItemID ║      Dates       ║  LocationName  ║   Type   ║
    ╠═════════╬════════╬══════════════════╬════════════════╬══════════╣
    ║       1 ║ ItemA  ║ 1/7/20 12:49 PM  ║ Outgoing_Loc   ║ Outgoing ║
    ║       2 ║ ItemA  ║ 1/2/20 7:29 AM   ║ Incoming_Loc_A ║ Incoming ║
    ║       3 ║ ItemB  ║ 1/3/20 11:01 AM  ║ Outgoing_Loc   ║ Outgoing ║
    ║       4 ║ ItemB  ║ 1/2/20 4:57 PM   ║ Incoming_Loc_B ║ Incoming ║
    ║       5 ║ ItemB  ║ 1/2/20 5:01 PM   ║ Incoming_Loc_A ║ Incoming ║
    ║       6 ║ ItemB  ║ 12/12/19 5:58 PM ║ Outgoing_Loc   ║ Outgoing ║
    ║       7 ║ ItemB  ║ 12/12/19 5:57 PM ║ Outgoing_Loc   ║ Outgoing ║
    ║       8 ║ ItemB  ║ 5/20/19 10:19 AM ║ Outgoing_Loc   ║ Outgoing ║
    ║       9 ║ ItemC  ║ 1/9/20 9:20 AM   ║ Outgoing_Loc   ║ Outgoing ║
    ║      10 ║ ItemC  ║ 1/2/20 6:42 PM   ║ Incoming_Loc_A ║ Incoming ║
    ║      11 ║ ItemC  ║ 12/20/19 5:54 AM ║ Outgoing_Loc   ║ Outgoing ║
    ║      12 ║ ItemC  ║ 10/10/19 6:13 PM ║ Outgoing_Loc   ║ Outgoing ║
    ║      13 ║ ItemC  ║ 10/5/19 7:00 PM  ║ Incoming_Loc_A ║ Incoming ║
    ║      14 ║ ItemC  ║ 7/16/19 9:18 AM  ║ Outgoing_Loc   ║ Outgoing ║
    ╚═════════╩════════╩══════════════════╩════════════════╩══════════╝
    
    我试图将每种类型的问题提供到分配给不同项目的表中

    完美的事务是ItemA,它是如此简单和干净,如果它们都是这样的话,那么我就可以连接表并将它们放在单独的列上

    ItemB,您会注意到这一个被扫描到了两个传入位置,但我只需要返回一个,这是该批中最早的一个。此外,需要返回最早的传出(12/12/19)之后和最后一个传出(1/3/20)之前的传入

    ItemC,与ItemB的上一条语句类似,此项在各个位置进出两次。需要按时间顺序获取最有意义的传入和传出对

    我不知道这有多困难,但我很难找到解决办法。我不知道如何在两次约会之间挤出时间

    输出示例:
    需要得到每件物品在车站的天数。如果项目已多次输入输出,则需要按时间顺序将输入和输出进行配对。例如,ItemC有多个传入和传出日期,但我只需要有一对开始和结束的日期

    +--------+-----------------+------------------+-----------------+
    | ItemID |    Incoming     |     Outgoing     | Days in Station |
    +--------+-----------------+------------------+-----------------+
    | ItemA  | 1/2/20 7:29 AM  | 1/7/20 12:49 PM  | 5.00            |
    | ItemB  | 1/2/20 4:57 PM  | 1/3/20 11:01 AM  | 1.00            |
    | ItemC  | 1/2/20 6:42 PM  | 1/9/20 9:20 AM   | 7.00            |
    | ItemC  | 10/5/19 7:00 PM | 10/10/19 6:13 PM | 5.00            |
    +--------+-----------------+------------------+-----------------+
    

    如果不在查询中创建额外的表,我看不出如何做到这一点

    如果您没有意识到它们,这是非常酷的,它会将您的SQL级别提升到下一个级别

    i、 e

    至少您需要以下表格: 显示项目是否已被扫描多次的表格。 按原样点那张桌子

    表1A。项目;外出次数;日期 按项目和日期说明订购(将显示最早日期)

    表1B 根据表1A,项目数超过一个的最早日期

    表2A。项目。传入的次数。 按项目和日期说明订购(将显示最早日期)

    表2B 根据表2A,项目数超过一项的最早日期

    使用表1B和2B得出您的答案


    其他人可能会更有耐心,给出更精确的答案,但希望上述内容能有所帮助。

    请不要发布第二个问题,同样,请编辑您的原始问题。一旦它得到改善,下票数可能会被删除。但这将被否决为重复。正如@DaleK所评论的,这与你之前的问题完全相同。我把它作为副本合上,回答了你的另一个问题。
    SELECT * 
    FROM 
        (SELECT * FROM WHERE ...)