mysql的group by的问题

Longerandlonger 2013-10-11 05:12:18
某个mysql的table如下:

date a b

2013-09-12 6 Apple
2013-09-11 7 Apple
2013-08-20 5 Orange
2013-10-09 8 Orange
2013-01-22 7 Banana
2013-01-22 0 Banana

我想按下面的要求取出记录:
1. b字段不能重复。如果两个记录的b相同,取date较大的那个记录。
2. a字段要求大于0。
3. 这些记录的条数可能有10w+条,所以需要实现分页。

跪求如何写sql.

...全文
182 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Longerandlonger 2013-10-12
  • 打赏
  • 举报
回复
看了这篇文章,茅塞顿开!!!差不多可以结贴了。
引用 8 楼 ACMAIN_CHM 的回复:
参考下贴中的多种方法 http://blog.csdn.net/acmain_chm/article/details/4126306 [征集]分组取最大N条记录方法征集,及散分...
Longerandlonger 2013-10-12
  • 打赏
  • 举报
回复
你是对的,是我写错了。
引用 7 楼 longfeng112 的回复:
[quote=引用 4 楼 Longerandlonger 的回复:] 这个可以算出结果。 很奇怪的是,我把 ‘t1.a > 0' 这个条件放在exists前,就不能成功。
不会的啊, 本来想放在子查询里面的,后来后来图方便就直接放后面了, 放前面应该会好一些.

select *
from sql0014 t1
where t1.a > 0
	and exists(
		select 1
		from sql0014
		group by b
		having max(date)
			and max(date) = t1.date
			and b = t1.b
	    )
limit 1,2;
[/quote]
ACMAIN_CHM 2013-10-11
  • 打赏
  • 举报
回复
参考下贴中的多种方法 http://blog.csdn.net/acmain_chm/article/details/4126306 [征集]分组取最大N条记录方法征集,及散分...
_Fong 2013-10-11
  • 打赏
  • 举报
回复
引用 4 楼 Longerandlonger 的回复:
这个可以算出结果。 很奇怪的是,我把 ‘t1.a > 0' 这个条件放在exists前,就不能成功。
不会的啊, 本来想放在子查询里面的,后来后来图方便就直接放后面了, 放前面应该会好一些.

select *
from sql0014 t1
where t1.a > 0
	and exists(
		select 1
		from sql0014
		group by b
		having max(date)
			and max(date) = t1.date
			and b = t1.b
	    )
limit 1,2;
Longerandlonger 2013-10-11
  • 打赏
  • 举报
回复
能解释一下,这个代码是怎么执行的吗?
引用 3 楼 lzd_83 的回复:
select * from tb A where a>0 and not exists(select 1 from tb where A.id=tb.id and A.b<tb.b) order by date limit 1,10;
Longerandlonger 2013-10-11
  • 打赏
  • 举报
回复
不太理解这个。。。
引用 楼主 Longerandlonger 的回复:
某个mysql的table如下: date a b 2013-09-12 6 Apple 2013-09-11 7 Apple 2013-08-20 5 Orange 2013-10-09 8 Orange 2013-01-22 7 Banana 2013-01-22 0 Banana 我想按下面的要求取出记录: 1. b字段不能重复。如果两个记录的b相同,取date较大的那个记录。 2. a字段要求大于0。 3. 这些记录的条数可能有10w+条,所以需要实现分页。 跪求如何写sql.
Longerandlonger 2013-10-11
  • 打赏
  • 举报
回复
这个可以算出结果。 很奇怪的是,我把 ‘t1.a > 0' 这个条件放在exists前,就不能成功。
引用 2 楼 longfeng112 的回复:

select *
from sql0014 t1
where exists(
	select 1
	from sql0014
	group by b
	having max(date)
		and max(date) = t1.date
		and b = t1.b
) and t1.a >0
limit 1,2;
看能不能达到你的要求? 如果有id的话应该更好判断.
Rotel-刘志东 2013-10-11
  • 打赏
  • 举报
回复
select * from tb a where a>0 and not exists(select 1 from tb where a.id=tb.id and a.b<tb.b) order by date limit 1,10;
_Fong 2013-10-11
  • 打赏
  • 举报
回复

select *
from sql0014 t1
where exists(
	select 1
	from sql0014
	group by b
	having max(date)
		and max(date) = t1.date
		and b = t1.b
) and t1.a >0
limit 1,2;
看能不能达到你的要求? 如果有id的话应该更好判断.
rucypli 2013-10-11
  • 打赏
  • 举报
回复
select * from tb A where a>0 and not exists(select 1 from tb where a=A.a and A.b<b) order by date limit 1,10;

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧