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