如何从SQL表中获取最小值?

时间:2012-06-15 14:49:57

标签: sql

我有一张表格如下

ID   Date  
1    Null  
1    Null  
1    Null  
1    02/02/2012  
1    02/03/2012  
1    02/04/2012  
1    02/05/2012  

我想从上表中选择一个最小日期,结果应为Null

我正在尝试写

select min(date), Id from Table group by ID

然后结果为02/02/2012,但我想要Null

除了以下方法之外,还有其他方法可以从上表中提取Null值吗?

select top 1 date, ID from table order by date asc

4 个答案:

答案 0 :(得分:5)

假设您的dbms是SQL-Server。

如果您想按id进行分组,但仍然选择所有字段,则可以cte使用ROW_NUMBER功能:

WITH cte AS(
  SELECT x.*
  , RN=ROW_NUMBER()OVER(Partition By id Order By date)
  FROM Table x
)
SELECT * FROM cte 
WHERE RN=1

http://sqlfiddle.com/#!3/cc2a4/7

答案 1 :(得分:3)

默认情况下,MAX和MIN函数在评估数据时不计算NULL。

尝试这种方式,应该做的诀窍:

SELECT 
CASE WHEN MIN(COALESCE(Date, '19001231')) = '19001231' THEN NULL ELSE MIN(Date) END AS Date,
Id 
FROM X 
group by ID

答案 2 :(得分:0)

我认为他们中的一些人得到了答案。但最终结果使用以下查询

SELECT CASE WHEN   MIN(coalesce(date, '1900-01-01')) = '1900-01-01' THEN NULL ELSE MIN(date) END AS Date, ID
FROM table
GROUP BY ID

答案 3 :(得分:0)

您也可以对'NULL'进行简单检查。我没有在示例中返回“ID”,因为“ID”在给出的示例模式/查询中似乎毫无意义。

    IF (EXISTS(SELECT TOP 1 * FROM x WHERE date IS NULL)) SELECT NULL AS MinDate
    ELSE SELECT MIN(date) AS MinDate FROM x;

http://sqlfiddle.com/#!3/d5fca/11