【发布时间】:2021-10-17 02:25:32
【问题描述】:
以下是包含original_date 和priority 列的数据集。根据某些条件识别输出的查询。条件如下所述
逻辑:
如果之前和当前日期与原始日期列的差小于 4 分钟且优先级大于 2,则在原始日期上增加 4 分钟。
注意:这个新的输出日期将是下一行计算的前一个日期。
很难根据上述条件填充输出。
CREATE OR REPLACE TABLE test_sev
(
original_date TIMESTAMP_NTZ(9),
priority varchar
);
INSERT INTO test_sev VALUES ('7/29/2021 14:45:00', 2);
INSERT INTO test_sev VALUES ('7/29/2021 14:46:41', 3);
INSERT INTO test_sev VALUES ('7/29/2021 14:47:13', 4);
INSERT INTO test_sev VALUES ('7/29/2021 14:51:38', 3);
INSERT INTO test_sev VALUES ('7/29/2021 14:51:46', 4);
INSERT INTO test_sev VALUES ('7/29/2021 15:05:50', 1);
INSERT INTO test_sev VALUES ('7/29/2021 15:13:50', 4);
输入数据集:
使用的查询:
WITH DATA1 AS
(
SELECT
original_date,
LAG(original_date, 1) OVER (ORDER BY original_date) AS prev_original_date,
DATEDIFF('minute', prev_original_date, original_date) AS TIME_DIFF,
CASE
WHEN priority > 2 AND TIME_DIFF < 4
THEN DATEADD ('minute', 4, prev_original_date)
ELSE original_date
END AS new_original_date,
priority
FROM
test_sev
)
SELECT
original_date, priority, new_original_date
FROM
DATA1;
我得到的输出:
问题:第 3、4 和 5 行错误。它没有从正在运行的new_original_date 获取上一个日期。
正确的输出:
请您帮忙解答一下正确的查询。感谢您对此的帮助。谢谢。
【问题讨论】:
-
您的查询按照您想要的逻辑进行。你想要的输出没有意义。
-
您真正使用的是哪个数据库?删除其他标签。
标签: mysql sql sql-server oracle