如果选择所有列,如何将DISTINCT子句和MIN函数应用于WHERE语句?

时间:2019-04-22 18:38:20

标签: sql oracle-sqldeveloper

我需要你的帮助。我想在表格上显示所有列,我可以在其中使用 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

2 个答案:

答案 0 :(得分:3)

这很简单:

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;

答案 1 :(得分:1)

您的第一个条件是不必要的。

您的第二秒将使用关联子句而不是group by

SELECT t.*
FROM TABLE t
WHERE t.DESIRED_DUE_DATE = (SELECT MIN(t2.DESIRED_DUE_DATE)
                            FROM TABLE t2
                            WHERE t2.DOCUMENT_NUMBER = t.DOCUMENT_NUMBER
                           )
order by t.DOCUMENT_NUMBER desc;
相关问题