首页 > 解决方案 > 如果要选择所有列,如何将 DISTINCT 子句和 MIN 函数应用于 WHERE 语句?

问题描述

我需要你的帮助。我想在可以使用DISTINCT子句和MIN函数的表上显示所有列。

--Here is a sample code that I've tried but failed to show the expected output
SELECT * FROM TABLE  
WHERE DOCUMENT_NUMBER IN ( 
                            SELECT DISTINCT DOCUMENT_NUMBER 
                              FROM TABLE

                                          ) 
and DESIRED_DUE_DATE IN (
                          SELECT MIN(DESIRED_DUE_DATE)
                            FROM TABLE
                              GROUP BY DOCUMENT_NUMBER)
order by DOCUMENT_NUMBER desc;

预期的输出应该是DOCUMENT_NUMBER都是不同的,或者更确切地说没有重复,并且所有不同的DOCUMENT_NUMBER的DESIRED_DUE_DATE在显示表上的所有列时都处于最小值。

上面的代码仍然显示重复Document_Number

标签: sqloracle-sqldeveloper

解决方案


它更简单:

SELECT DOCUMENT_NUMBER, MIN(DESIRED_DUE_DATE) DESIRED_DUE_DATE
FROM TABLE
GROUP BY DOCUMENT_NUMBER
ORDER BY DOCUMENT_NUMBER desc;

GROUP BY返回 的不同值DOCUMENT_NUMBER
如果你想要表的所有列:

SELECT t.* 
FROM TABLE t INNER JOIN (
    SELECT DOCUMENT_NUMBER, MIN(DESIRED_DUE_DATE) DESIRED_DUE_DATE
    FROM TABLE
    GROUP BY DOCUMENT_NUMBER
) g on g.DOCUMENT_NUMBER = t.DOCUMENT_NUMBER AND g.DESIRED_DUE_DATE = t.DESIRED_DUE_DATE    
ORDER BY t.DOCUMENT_NUMBER desc;

推荐阅读