如何将NULL视为MAX日期而不是在MySQL中忽略它?

use*_*700 19 mysql null max

可以说我有一个名为test的表,如下所示:

ID   DATE     

1     '2013-01-26'
1     NULL
1     '2013-03-03'      
2     '2013-02-23'      
2     '2013-04-12'      
2     '2013-05-02'   
Run Code Online (Sandbox Code Playgroud)

我想从这张表中得到:

ID   DATE     

1     NULL    
2     '2013-05-02'   
Run Code Online (Sandbox Code Playgroud)

这是我的查询:

select ID, max(DATE)
from test
group by ID
Run Code Online (Sandbox Code Playgroud)

问题是MYSQL忽略NULL值并返回给我

ID   DATE     

1     '2013-03-03'   
2     '2013-05-02' 
Run Code Online (Sandbox Code Playgroud)

如果有NULL,我怎么能这样做,它需要MAX为NULL?

Sam*_*ley 23

试一试:

SELECT ID, case when MAX(DATE IS NULL) = 0 THEN max(DATE) END AS DATE
FROM test
GROUP BY ID;
Run Code Online (Sandbox Code Playgroud)

  • 你可能会更详细,并把'THEN max(DATE)ELSE NULL` (3认同)

asa*_*afm 7

Null不是值或数字,它只是null.这就是你使用"where col1为null"而不是"col1 = null"的原因.解决方法是使用IFNULL并设置一个非常高的值.

select ID, max(IFNULL(DATE,'3000-01-01'))
from test
group by ID
Run Code Online (Sandbox Code Playgroud)


Jas*_*Heo 5

FYI在函数NULL中使用时会被忽略aggregation

mysql> SELECT * FROM null_test;
+------+
| c    |
+------+
| NULL |
|    1 |
|    2 |
|    3 |
+------+
4 rows in set (0.00 sec)

mysql> SELECT COUNT(c) FROM null_test;
+----------+
| COUNT(c) |
+----------+
|        3 | <= not 4 but 3
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM null_test;
+----------+
| COUNT(*) |
+----------+
|        4 | <= in this case not 3 but 4
+----------+
1 row in set (0.00 sec)

mysql> SELECT AVG(c) FROM null_test;
+--------+
| AVG(c) |
+--------+
| 2.0000 | <= not (1+2+3) / 4 but (1+2+3) / 3
+--------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)