SQL子查询:子查询的列太多

SQL子查询:子查询的列太多,sql,postgresql,Sql,Postgresql,我正在尝试运行一个包含2个子查询的查询。我正在尝试创建一个名为“Delta Date”的字段,它从第二个查询中减去Date1中的minDate。请帮助,我一直收到错误“子查询的列太多” SELECT Date1, #first query (Date1 - minDate) as Delta Date UNIQUE_ID FROM panel WHERE (lower(criteria) LIKE lower(\'%crite

我正在尝试运行一个包含2个子查询的查询。我正在尝试创建一个名为“Delta Date”的字段,它从第二个查询中减去Date1中的minDate。请帮助,我一直收到错误“子查询的列太多”

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 )

标记为第二个查询的子查询返回minDate&UNIQUE\u ID。这就是问题所在

选择minDate1作为minDate中的唯一\u ID,唯一\u ID来自

您需要在第一个查询的FROM子句中放入第二个查询。

在此上下文中,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
                        )
    )
SELECT Date1, UNIQUE_ID,
     (Date1 - MIN(DATE1) OVER (PARTITION BY UNIQUE_ID) ) as Delta Date
FROM  panel
WHERE (lower(criteria) LIKE lower(\'%criteria1%\'));