求一个sql

troy_211 2015-08-14 04:18:52
假设我有一个表里面存的都是动物,有一个类型的字段(type)代表了猪、羊、牛,然后还有一个字段是出生时间(date)。

我要查询每一种动物出生日期最早的,就是猪,羊,牛每种类型只返回一条数据,这条数据的日期是最早的,这个sql怎么写。
...全文
117 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_30364005 2015-08-16
  • 打赏
  • 举报
回复
Min() over (partition by... )
陈灬风 2015-08-14
  • 打赏
  • 举报
回复
select 类型, 出生日期 from (select t.*, row_number() over(partition by t.类型 order by t.出生日期 asc) rn where 表 t) where rn = 1;
troy_211 2015-08-14
  • 打赏
  • 举报
回复
引用 3 楼 wildwave 的回复:
select * from 表 t where not exists(select 1 from 表 x where t.类型=x.类型 and x.出生日期<t.出生日期)
谢谢,这个语句可以用
troy_211 2015-08-14
  • 打赏
  • 举报
回复
引用 4 楼 u011128219 的回复:
[quote=引用 2 楼 troy_211 的回复:] [quote=引用 1 楼 u011128219 的回复:]
select 类型,min(出生时间)
from 动物裱
group by 类型;
谢谢,你这个应该是可行了,那如果我还有更多的字段,在select后面添加,怎么都在加在group by后面[/quote] 加在select后面就可以了,group by 不用加。[/quote]不加会报错啊,说select后面的字段除了聚合函数都要添加到group by,但是添加到group by 之后的查询结果就和预期的不一样了
troy_211 2015-08-14
  • 打赏
  • 举报
回复
引用 3 楼 wildwave 的回复:
select * from 表 t where not exists(select 1 from 表 x where t.类型=x.类型 and x.出生日期<t.出生日期)
这样查的结果好像不对啊,子查询里面select 1 是什么意思
_Kem 2015-08-14
  • 打赏
  • 举报
回复
引用 2 楼 troy_211 的回复:
[quote=引用 1 楼 u011128219 的回复:]
select 类型,min(出生时间)
from 动物裱
group by 类型;
谢谢,你这个应该是可行了,那如果我还有更多的字段,在select后面添加,怎么都在加在group by后面[/quote] 加在select后面就可以了,group by 不用加。
小灰狼W 2015-08-14
  • 打赏
  • 举报
回复
select * from 表 t where not exists(select 1 from 表 x where t.类型=x.类型 and x.出生日期<t.出生日期)
troy_211 2015-08-14
  • 打赏
  • 举报
回复
引用 1 楼 u011128219 的回复:
select 类型,min(出生时间)
from 动物裱
group by 类型;
谢谢,你这个应该是可行了,那如果我还有更多的字段,在select后面添加,怎么都在加在group by后面
_Kem 2015-08-14
  • 打赏
  • 举报
回复
select 类型,min(出生时间)
from 动物裱
group by 类型;

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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