Как применить предложение DISTINCT и функцию MIN к оператору WHERE, если вы выбираете все столбцы? - PullRequest
1 голос
/ 22 апреля 2019

Мне нужна твоя помощь. Я хочу показать все столбцы в таблице, где я могу использовать предложение 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 , все они различны или, скорее, не повторяются, а DESIRED_DUE_DATE всех отдельных DOCUMENT_NUMBER имеет минимальное значение при отображении всех столбцов на столе.

приведенный выше код все еще показывает мне дубликат Document_Number .

Ответы [ 2 ]

3 голосов
/ 22 апреля 2019

Это проще:

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 голос
/ 22 апреля 2019

Ваше первое условие не нужно.

Ваше второе будет работать с предложением корреляции вместо 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;
...