Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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_Netezza_Correlated Subquery - Fatal编程技术网

Sql 将相关子查询转换为联接

Sql 将相关子查询转换为联接,sql,netezza,correlated-subquery,Sql,Netezza,Correlated Subquery,我想表示: SELECT a.* ,b.timestamp_col FROM weird_data_source a LEFT JOIN weird_data_source b ON a.id = b.id AND b.timestamp_col = ( SELECT MAX(sub.timestamp_col) FROM weird_data_source sub WHERE sub.id = a.

我想表示:

SELECT
    a.*
    ,b.timestamp_col
FROM weird_data_source a
LEFT JOIN weird_data_source b
ON a.id = b.id
    AND b.timestamp_col = (
        SELECT
            MAX(sub.timestamp_col)
        FROM weird_data_source sub
        WHERE sub.id = a.id
            AND sub.date_col <= a.date_col
            AND sub.timestamp_col < a.timestamp_col
    )
以下是关于数据的几点说明:

日期和时间戳并不代表同一事物。 我不是开玩笑。。。数据的结构是这样的。
但是子查询无效。Netezza无法处理这会让你非常接近。如果有两行具有完全相同的时间戳且符合条件,则将得到重复的行,否则您应该是好的:

SELECT
    a.id,
    a.some_other_columns,    -- Because we NEVER use SELECT *
    b.timestamp_col
FROM
    weird_data_source a
LEFT JOIN weird_data_source b ON
    a.id = b.id
LEFT OUTER JOIN weird_data_source c ON
    c.id = a.id AND
    c.date_col <= a.date_col AND
    c.timestamp_col < a.timestamp_col
LEFT OUTER JOIN weird_data_source d ON
    d.id = a.id AND
    d.date_col <= a.date_col AND
    d.timestamp_col < a.timestamp_col AND
    d.timestamp_col > c.timestamp_col
WHERE
    d.id IS NULL

查询基本上是寻找一个匹配行,其中没有找到具有更大timestamp\u col值的其他匹配行-因此d.id为NULL。只有在未找到匹配项的情况下,该列才会为空。

netezza平台上是否提供横向联接?能否将CTEs和行号函数用于netezza?@GiorgosBetsos,否:@TabAlleman,是的,可以使用CTEs和窗口功能。我试过使用稠密等级,但我还没有弄明白。@sagi,一点也没有。这与比较运算符没有什么关系,更多的是关于数据库的语义只是一个简单的问题,第一个左连接和后连接是否错误?是的,这是一个复制/粘贴错误。我会更正它的,谢谢。接受这个,因为复制应该可以用一个选择不同的处理。选择*只是在键入问题时节省了空间;继续并尝试实现这个,它产生了一个笛卡尔连接。我不知道怎么了。回顾过去,我不确定第一次加入是否有必要。我把它作为您最初查询的一部分留在这里,但我认为它不适用于这里。你能试着移除它,看看是否能解决问题吗?如果有,我将编辑我的答案。这就是为什么样本数据和预期结果有助于。。。我本来可以执行这些测试步骤的。