SQL查询如何使用两个日期变量? 'date'和regexp_replace('date','-',''),1,8)

时间:2019-11-07 07:46:09

标签: python sql oracle

SQL查询是python文件的部分代码,tt1的val和tt2的val在单个文件中都可以正常工作,现在我想计算tt1.val/tt2.val,我必须输入参数codestart_dateend_date

the date from table_name_a is '20191107'

the date from table_name_b is '2019-11-07 00:00:00'

这就是为什么我在table_name_b中使用substr(regexp_replace(date,'-',''),1,8),按如下所示粘贴错误的SQL查询的原因,可以使用case whenif else来使用两个不同的日期变量吗?非常感谢您的任何建议。

SELECT code, tt1.val/tt2.val
FROM (

    (
    SELECT code,
        CAST (exp(sum(ln(val+1))) -1 AS decimal(20,16)) val
    FROM (
        SELECT code, val
        from table_name_a
        WHERE code IN ('%(code)s')
        AND date BETWEEN '%(start_date)s' AND '%(end_date)s')
    GROUP BY code
    ) AS tt1
    (
    SELECT code,
        CAST (exp(sum(ln(val+1))) -1 AS decimal(20,16)) val
    FROM (
        SELECT code, val
        from table_name_b
        WHERE code IN ('%(code)s')
        AND substr(regexp_replace(date,'-',''),1,8) BETWEEN '%(start_date)s' AND '%(end_date)s' AS t1
    GROUP BY code
    ) AS tt1
) AS tt3

1 个答案:

答案 0 :(得分:0)

我认为您只需要JOIN您的查询:

SELECT tt1.code, tt1.val/tt2.val
FROM (SELECT code
           , CAST (exp(sum(ln(val+1))) -1 AS decimal(20,16)) val
        FROM table_name_a
       WHERE code IN ('%(code)s')
         AND date BETWEEN '%(start_date)s' AND '%(end_date)s'
       GROUP BY code) tt1
JOIN (SELECT code
           , CAST (exp(sum(ln(val+1))) -1 AS decimal(20,16)) val
        FROM table_name_b
       WHERE code IN ('%(code)s')
         AND substr(regexp_replace(date,'-',''),1,8) BETWEEN '%(start_date)s' AND '%(end_date)s'
       GROUP BY code) tt2
  ON tt2.code = tt1.code

还简化了您的查询。