Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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_Oracle_Mariadb_Lag_Ignore - Fatal编程技术网

Sql 滞后(…)忽略空值(按…排序)

Sql 滞后(…)忽略空值(按…排序),sql,oracle,mariadb,lag,ignore,Sql,Oracle,Mariadb,Lag,Ignore,我有一个ORACLE SQL,它有延迟。。。忽略订单上的空值。。。在代码中,但在尝试将其用于MariaDB的SQL时出错。有人知道MariaDB的类似功能吗 更新: 我从中提取的真实数据库没有用于返工步骤的正确步骤号,因此需要将步骤号绑定到具有MAIN作为步骤值的最后一行。如表示例中所示,所有返工行的“期望结果”列都有步骤102,这是从2018年10月10日01:00:03索赔的最后一个主行开始的 示例代码: WITH testTable AS ( SELECT '10/9/2018

我有一个ORACLE SQL,它有延迟。。。忽略订单上的空值。。。在代码中,但在尝试将其用于MariaDB的SQL时出错。有人知道MariaDB的类似功能吗

更新:

我从中提取的真实数据库没有用于返工步骤的正确步骤号,因此需要将步骤号绑定到具有MAIN作为步骤值的最后一行。如表示例中所示,所有返工行的“期望结果”列都有步骤102,这是从2018年10月10日01:00:03索赔的最后一个主行开始的

示例代码:

WITH testTable AS (
     SELECT '10/9/2018 17:22:54' AS claim_ts, 'MAIN' AS step, '100' AS step_no, '100' as desired_results UNION ALL
     SELECT '10/9/2018 20:39:32', 'MAIN', '101', '101'   UNION ALL
     SELECT '10/10/2018 01:00:03', 'MAIN', '102', '102' UNION ALL
     SELECT '10/10/2018 01:01:44', 'REWORK', '5', '102' UNION ALL
     SELECT '10/11/2018 05:55:20', 'REWORK', NULL, '102' UNION ALL
     SELECT '10/11/2018 13:12:11', 'REWORK', '5', '102' UNION ALL
     SELECT '10/11/2018 16:45:00', 'REWORK', NULL, '102' UNION ALL
     SELECT '10/12/2018 03:08:25', 'MAIN', '103', '103'
)
SELECT
claim_ts,
step,
step_no,
desired_results
从测试表

结果示例

根据,MariaDB不支持此选项:


MariaDB不支持忽略空值选项。但是,我们可以使用相关子查询模拟MariaDB或MySQL中的延迟,例如

SELECT
    id,
    col1,
    col2,
    (SELECT t2.col1 FROM yourTable t2
     WHERE t2.id < t1.id AND t2.col1 IS NOT NULL
     ORDER BY t2.id DESC LIMIT 1) col1_lag
FROM yourTable t1;
编辑:

您在更新的问题中所期望的输出不是真正的滞后,但我们可以使用类似的逻辑来获得您想要的:

SELECT
    claim_ts,
    step,
    step_no,
    desired_results,
    (SELECT t2.step_no FROM testTable t2
     WHERE t2.claim_ts <= t1.claim_ts AND t2.step = 'MAIN'
     ORDER BY t2.claim_ts DESC LIMIT 1) AS actual_results
FROM testTable t1;

您可能应该包括您的查询。即使MariaDB不支持IGNORE NULLS,也可能有一个解决方法。desired_results列似乎没有任何延迟。如果您想要帮助生成该列,您应该仔细解释那里发生了什么。我再次进行了更新,希望更清楚。我不确定如何更改id以使用时间戳。我用示例数据更新了我的帖子。@newbie_146我给了你一个选项来生成你想要的最新结果。
SELECT
    id,
    col1,
    col2,
    (SELECT t2.col1 FROM yourTable t2
     WHERE t2.id < t1.id AND t2.col1 IS NOT NULL
     ORDER BY t2.id DESC LIMIT 1) col1_lag
FROM yourTable t1;
SELECT
    claim_ts,
    step,
    step_no,
    desired_results,
    (SELECT t2.step_no FROM testTable t2
     WHERE t2.claim_ts <= t1.claim_ts AND t2.step = 'MAIN'
     ORDER BY t2.claim_ts DESC LIMIT 1) AS actual_results
FROM testTable t1;