SQL-запрос, как использовать две переменные даты? 'Date' и regexp_replace ('date', '-', ''), 1,8) - PullRequest
0 голосов
/ 07 ноября 2019

SQL-запрос представлял собой частичный код файла Python, tt1 val и tt2 val отлично работают в одном файле, теперь я хотел бы вычислить tt1.val/tt2.val, мне нужно ввести параметр code,start_date и end_date,

the date from table_name_a is '20191107'

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

Вот почему я использую substr(regexp_replace(date,'-',''),1,8) в table_name_b, я вставил свой неправильный SQL-запрос, как показано ниже, могу ли я использовать case when или if 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 голосов
/ 07 ноября 2019

Я думаю, вам просто нужно 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

Также немного упростил ваш запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...