SELECT A_id, IF(A_status = 'OK', A_date, 0) as date
FROM A
GROUP BY A_id
HAVING COUNT(1) >= 2 AND MAX(date) < CURDATE() AND MAX(date) != 0如上假设A表有A_id,A_status,A_date三个字段
这种写法是对的吗
意图是找出以A_id分组,A_date最大的那条记录中,A_date小于今天且A_status=‘OK’
FROM A
GROUP BY A_id
HAVING COUNT(1) >= 2 AND MAX(date) < CURDATE() AND MAX(date) != 0如上假设A表有A_id,A_status,A_date三个字段
这种写法是对的吗
意图是找出以A_id分组,A_date最大的那条记录中,A_date小于今天且A_status=‘OK’
解决方案 »
- 这读取有毛病吗
- 关于MYSQL表中某字段内容前空格删除的命令
- Thread stack overrun(mysql)急就送100分
- 将一个列的数据取前几位并更新该列的sql语句
- 请高手前来赐教mysql查询语句问题!!!
- STDDEV是不是计算标准差,好象和程序计算所的有偏差
- 超急::给mysql打ipv6 enabled补丁后,通过它的C API连接的诡异问题
- ERROR 1064 (42000) at line 1346:
- 用三台服务器(CentOS 6.4)搭建MySql Cluster 7.3.5的问题
- 我自己写的一个mysql函数,为什么报错,请问正确的该怎么写
- MySQL多表查询
- 希望用substring 截取表aaaa的name列的前两个字母,填入到表bbbb相应的id后name1里
改成这样试试;select *
from
(
SELECT A_id, IF(A_status = 'OK', A_date, 0) as date
FROM A
GROUP BY A_id
HAVING COUNT(1) >= 2
)A
where MAX(date) < CURDATE() ANDdate != 0
group by之后建一张临时表 一个id就只对应一条记录 那max还有什么意义?
group by之后建一张临时表 一个id就只对应一条记录 那max还有什么意义?上面写错了要把max去掉,实际上having就是对于group by时候,进行过滤数据,和where是一样的。你试试把你写的代码,和我上面的代码,运行,看看结果是否一样?
group by之后建一张临时表 一个id就只对应一条记录 那max还有什么意义?上面写错了要把max去掉,实际上having就是对于group by时候,进行过滤数据,和where是一样的。你试试把你写的代码,和我上面的代码,运行,看看结果是否一样?
结果是一样的 但是里面存在错误结果 我也不知道为什么
group by之后建一张临时表 一个id就只对应一条记录 那max还有什么意义?上面写错了要把max去掉,实际上having就是对于group by时候,进行过滤数据,和where是一样的。你试试把你写的代码,和我上面的代码,运行,看看结果是否一样?
结果是一样的 但是里面存在错误结果 我也不知道为什么那可能是因为mysql的语法比较特殊,因为一般的group by语法, IF(A_status = 'OK', A_date, 0) as date肯定会报错,但是在mysql中是不会报错的,所以问题的关键就是 这个 IF(A_status = 'OK', A_date, 0) as date,这个值是随机出来的值,你加上max试试
group by之后建一张临时表 一个id就只对应一条记录 那max还有什么意义?上面写错了要把max去掉,实际上having就是对于group by时候,进行过滤数据,和where是一样的。你试试把你写的代码,和我上面的代码,运行,看看结果是否一样?
结果是一样的 但是里面存在错误结果 我也不知道为什么那可能是因为mysql的语法比较特殊,因为一般的group by语法, IF(A_status = 'OK', A_date, 0) as date肯定会报错,但是在mysql中是不会报错的,所以问题的关键就是 这个 IF(A_status = 'OK', A_date, 0) as date,这个值是随机出来的值,你加上max试试好像可以这样:SELECT A_id
FROM A
GROUP BY A_id
HAVING COUNT(1) >= 2 AND MAX(date) < CURDATE() AND MAX(IF(A_status = 'OK', A_date, 0) ) = MAX(date)
FROM A
GROUP BY A_id
HAVING MAX(date) < CURDATE() AND A_status='OK';