Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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
ID为的SQL爬虫程序_Sql_Sql Server - Fatal编程技术网

ID为的SQL爬虫程序

ID为的SQL爬虫程序,sql,sql-server,Sql,Sql Server,想知道是否有人可以提供一些关于如何设置此SQL查询的指导。我有一个ERP数据库,有很多交易记录。如果某个物料具有特定类型的事务处理类型BOM Issue,则使用唯一的事务处理ID(例如12345)记录该物料。事务ID按顺序记录。因此,下一笔交易将是12346。如果我搜索一个零件,它发现这个项目有一个BOM问题事务处理。我希望我的SQL查询从它的事务ID开始,并通过递减事务ID来爬网这些事务记录。它必须按顺序爬网,直到到达事务类型为BOM收据的零件的事务记录 这是一个视频。我搜索黄色部分,并希望得

想知道是否有人可以提供一些关于如何设置此SQL查询的指导。我有一个ERP数据库,有很多交易记录。如果某个物料具有特定类型的事务处理类型BOM Issue,则使用唯一的事务处理ID(例如12345)记录该物料。事务ID按顺序记录。因此,下一笔交易将是12346。如果我搜索一个零件,它发现这个项目有一个BOM问题事务处理。我希望我的SQL查询从它的事务ID开始,并通过递减事务ID来爬网这些事务记录。它必须按顺序爬网,直到到达事务类型为BOM收据的零件的事务记录

这是一个视频。我搜索黄色部分,并希望得到绿色部分的结果

编辑并回答评论:

好的,您可能只是想迭代应用层中的所有ID并使用上面的查询

SQL解决方案用于:

SELECT * FROM transactions t1, transactions t2
    WHERE t1.type = 'BOM receipt' AND t2.type = 'BOM Issue'
    AND t2.id > t1.id
    AND (
        t2.id < (
            SELECT MIN(id) FROM transactions
            WHERE type = 'BOM receipt' AND id > t1.id)
        OR NOT EXISTS (
            SELECT id FROM transactions
            WHERE type = 'BOM receipt' AND id > t1.id)
    )
这将为任何问题选择收据。您可能只想选择特定的列e。Gt1.id,t2.id,您可以添加其他条件:t2.id=firstWantedId和t2.id=secondWantedId,以便仅获取您感兴趣的id,如果需要对结果进行排序,请按t1.id,t2.id添加顺序


可能还存在优化的潜力,但至少它是有效的…

所以查询只是在BOM发出之前返回第一个BOM收据?如果不是,那么您需要解释“子部件10”和“父部件”之间的关系。为什么必须按顺序爬行?顺序/迭代操作是关系数据库系统中的反模式。@DeanOC是的,正是这样。@squillman它不一定需要顺序爬网,我只是假设它需要。我需要在BOM发布之前的第一个BOM收据。事务ID是在第一次收到BOM后按顺序分发的,我的相关零件可能会在序列中的任何位置。指定ID<1235不是有点太具体了吗?我猜OP是在寻找一个更通用的解决方案。我假设OP因为任何原因都知道id,他可以适当地替换它。G一份准备好且id<的声明?在应用层。@Aconcagua hmmmm…这很有趣。我明天要在家里测试一下。如果您熟悉制造业,将有许多BOM收据,在搜索零件时,也会有许多跨越不同时间戳的BOM问题实例。我将如何修改它,使其更具动态性?比如说,我搜索的部分有5个随机ID的实例。
SELECT * FROM transactions t1, transactions t2
    WHERE t1.type = 'BOM receipt' AND t2.type = 'BOM Issue'
    AND t2.id > t1.id
    AND (
        t2.id < (
            SELECT MIN(id) FROM transactions
            WHERE type = 'BOM receipt' AND id > t1.id)
        OR NOT EXISTS (
            SELECT id FROM transactions
            WHERE type = 'BOM receipt' AND id > t1.id)
    )