Sql server 基于输出/输入日期链接两行数据

Sql server 基于输出/输入日期链接两行数据,sql-server,fifo,Sql Server,Fifo,模式和示例数据 下面是一些显示表格布局的示例数据。在本例中,我仅显示特定项目和序列的事务。但是,在生产环境中,会有其他项/序列,因此执行的任何联接都需要在这两个字段上 transid Item qty Transdate Type Serial IssuedTo ======= =========================== === ======================= ======= =====

模式和示例数据

下面是一些显示表格布局的示例数据。在本例中,我仅显示特定项目和序列的事务。但是,在生产环境中,会有其他项/序列,因此执行的任何联接都需要在这两个字段上

transid Item                        qty Transdate               Type    Serial  IssuedTo
======= =========================== === ======================= ======= ======= ========
423371  SUNNENBOREGAGE1.18-2.0-3    1   2012-10-22 08:49:18.000 ISSRT   G-02145 742
422415  SUNNENBOREGAGE1.18-2.0-3    -1  2012-10-17 18:42:08.000 RETN    G-02145 139
422082  SUNNENBOREGAGE1.18-2.0-3    1   2012-10-17 13:21:38.000 REISS   G-02145 139
421518  SUNNENBOREGAGE1.18-2.0-3    1   2012-10-15 13:37:08.000 ISSRT   G-02145 709
421459  SUNNENBOREGAGE1.18-2.0-3    -1  2012-10-15 09:37:41.000 RETN    G-02145 640
421426  SUNNENBOREGAGE1.18-2.0-3    1   2012-10-15 08:02:19.000 ISSRT   G-02145 640
420100  SUNNENBOREGAGE1.18-2.0-3    -1  2012-10-10 06:23:34.000 RETN    G-02145 742
420097  SUNNENBOREGAGE1.18-2.0-3    1   2012-10-10 06:22:21.000 ISSRT   G-02145 742
所有返回都由RETN或REIS类型标记。所有问题都由ISSRT或REIS类型标记。补发补发既是一种回报,也是一种问题。ISSUEDTO字段标记接收REIS或ISSRT交易项目的人员

期望结果

简言之,我希望查找日期范围季度内的所有退货和匹配的出库交易,而不管它是何时发出的,这样我就可以识别它是发给哪个员工的,以及该员工拥有该特定项目/序列的时间长度(以天为单位)

我的最终结果集的列如下所示:

ITEM SERIAL EMPLOYEE ISSUETRANSID ISSUEDATE RETURNTRANSID RETURNDATE DAYSOUT
我似乎不知道该怎么做,因为从技术上讲,REISS是一行上的两个事务,并且确保每个ISSRT或REISS事务对于每个RETN或REISS事务只使用一次。这听起来也很像一个FIFO/LIFO问题,但我似乎不能在这里应用逻辑,这可能只是我自己的缺点


任何帮助或指点都将不胜感激!谢谢你=

在做了更多的研究之后,我相信我找到了我问题的答案。使用以下帖子中的信息是我所需要的

我的代码是特定的,可能与示例数据不明确匹配:

SELECT 
    ReturnedItems.SerialID AS SerialID,
    ReturnedItems.Item AS R_Item,
    ReturnedItems.TransNumber AS R_TransNumber,
    ReturnedItems.TransDate AS R_TransDate,
    ReturnedItems.TypeDescription AS R_TransDescription,
    ReturnedItems.IssuedTo AS R_IssuedTo,
    IssuedItems.TransNumber AS I_TransNumber,
    IssuedItems.TransDate AS I_TransDate,
    IssuedItems.TypeDescription AS I_TransDescription,
    IssuedItems.IssuedTo AS I_IssuedTo,
    DATEDIFF(HOUR, IssuedItems.TransDate, ReturnedItems.TransDate) / 24 AS Days_Out
FROM 
    CribMaster.dbo.TRANS AS ReturnedItems CROSS APPLY (
        SELECT TOP 1 
            CribMaster.dbo.TRANS.Item AS Item,
            CribMaster.dbo.TRANS.SerialID AS SerialID,
            CribMaster.dbo.TRANS.TransNumber AS TransNumber,
            CribMaster.dbo.TRANS.TransDate AS TransDate,
            CribMaster.dbo.TRANS.TypeDescription AS TypeDescription,
            CribMaster.dbo.TRANS.IssuedTo AS IssuedTo
        FROM 
            CribMaster.dbo.TRANS 
        WHERE
            CribMaster.dbo.TRANS.SerialID = ReturnedItems.SerialID AND 
            CribMaster.dbo.TRANS.TypeDescription IN ('ISSRT', 'REISS') AND 
            CribMaster.dbo.TRANS.TransDate < ReturnedItems.TransDate
        ORDER BY 
            CribMaster.dbo.TRANS.TransDate DESC
    ) AS IssuedItems
WHERE 
    ReturnedItems.TypeDescription IN ('RETN', 'REISS') AND 
    ReturnedItems.TransDate < '10/1/2012' AND
    ReturnedItems.TransDate >= '7/1/2012'

通过将实际的商业设计与技术问题结合在一起,你使得这篇文章太长,很难理解,因此你会得到很少或没有答案。尝试将问题简化为纯粹的技术术语,例如,根据开始/结束日期链接多个记录中的数据,等等。。。。您还可以包括一个更简单、易于理解的通用示例。你会得到更好的回答。@JKarthik:ISSRT是一个可回收的问题item@SamAnwar:谢谢,我会尽量缩短我的问题。