2016-02-17 2 views
0

Я пытаюсь запустить запрос, содержащий в нем 2 подзапроса. Я пытаюсь создать поле под названием «Delta Date», которое вычитает minDate (из второго запроса) из Date1. Пожалуйста, помогите, я продолжаю получать ошибку. «В подзапросе слишком много столбцов».SQL Subquery: в подзапросе слишком много столбцов

SELECT Date1,     #first query 
    (Date1 - minDate) as Delta Date 
    UNIQUE_ID 
FROM panel 
    WHERE (lower(criteria) LIKE lower(\'%criteria1%\')) 
    AND UNIQUE_ID IN (


SELECT min(Date1) as minDate,   #second query 
    UNIQUE_ID 
FROM panel 
    WHERE (lower(criteria) LIKE lower(\'%criteria2%\')) 
    AND Amount < 10000 
    AND UNIQUE_ID IN (SELECT UNIQUE_ID  #third query 
          FROM  panel 
          WHERE file_date > \'9/30/2015\' 
/* AND additional logic to filter member purchases */ 
          GROUP BY UNIQUE_ID 
          HAVING count(AMOUNT) > 1) 

GROUP BY UNIQUE_ID) 

ответ

0

Ваш подзапрос, который вы отметили как "запрос" # Секунда возвращает MinDate & unique_id. Это проблема.

UNIQUE_ID IN (SELECT MIN (Date1) в MinDate, unique_id ИЗ ....

Вы должны поместить запрос в # Секунда ЕКОМ первого запроса.

0

An in подзапрос должен иметь только один столбец в этом контексте:

UNIQUE_ID IN (
    SELECT UNIQUE_ID 
    FROM panel 
    WHERE (lower(criteria) LIKE lower(\'%criteria1%\')) AND 
      UNIQUE_ID IN (SELECT UNIQUE_ID 
         FROM panel 
         WHERE (lower(criteria) LIKE lower(\'%criteria2%\')) AND 
           Amount < 10000 AND 
           UNIQUE_ID IN (SELECT UNIQUE_ID 
              FROM panel 
              WHERE file_date > \'9/30/2015\' 
    /* AND additional logic to filter member purchases */ 
           GROUP BY UNIQUE_ID 
           HAVING count(AMOUNT) > 1 
          ) 
         GROUP BY UNIQUE_ID 
         ) 
    ) 

Ваша логика довольно трудно следовать, и я не уверен, фиксируя синтаксис создает запрос, d что вы хотите.

Я думаю, вы можете использовать функции окна для аналогичного эффекта. Я не уверен, какова будет логика, но она будет выглядеть так:

SELECT Date1, UNIQUE_ID, 
    (Date1 - MIN(DATE1) OVER (PARTITION BY UNIQUE_ID)) as Delta Date 
FROM panel 
WHERE (lower(criteria) LIKE lower(\'%criteria1%\')); 
Смежные вопросы