我有一张表格如下
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
答案 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
答案 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;