2016-02-17 159 views
0

我想運行一個查詢,其中有2個子查詢。我試圖創建一個名爲'Delta Date'的字段,它從Date1中減去minDate(來自第二個查詢)。請幫助,我不斷收到錯誤'子查詢有太多列。'SQL子查詢:子查詢有太多列

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

你的子查詢,你標記爲 「#second查詢」 返回的minDate & UNIQUE_ID。這就是問題。

UNIQUE_ID IN(SELECT分鐘(日期1)爲的minDate,UNIQUE_ID FROM ....

你需要把#second查詢在FROM第一查詢的WHERE子句。

0

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 A查詢oes你想要什麼。

我認爲你可以使用窗口函數類似的效果。我不確定究竟是什麼邏輯,但它看起來像這樣:

SELECT Date1, UNIQUE_ID, 
    (Date1 - MIN(DATE1) OVER (PARTITION BY UNIQUE_ID)) as Delta Date 
FROM panel 
WHERE (lower(criteria) LIKE lower(\'%criteria1%\'));