123
返回列表 发新帖
楼主: accphaijiang

[SQL] 求sql写法

[复制链接]
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
21#
发表于 2011-9-30 22:41 | 只看该作者
ghsau 发表于 2011-9-30 11:58
用over函数,怎么弄的那么复杂,看我的可以不

你这where proid in 完全没有意义;前面的则没有考虑时间交叉的情况。

使用道具 举报

回复
论坛徽章:
14
2011新春纪念徽章
日期:2011-02-18 11:43:35生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:32:552012新春纪念徽章
日期:2012-02-07 09:59:352012新春纪念徽章
日期:2012-01-04 11:53:54蜘蛛蛋
日期:2011-12-02 17:13:44ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26开发板块每日发贴之星
日期:2011-08-16 01:01:01
22#
 楼主| 发表于 2011-10-1 21:32 | 只看该作者
gg2006j 发表于 2011-9-30 18:00
话说我真没看懂各个列的意义,麻烦LZ解释下?

ID 序列值
bdate    开始时间
edate 结束时间
proid 暂时理解为产品ID   
prc 价格

使用道具 举报

回复
论坛徽章:
1
ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59
23#
发表于 2011-10-8 15:18 | 只看该作者
你这where proid in 完全没有意义;前面的则没有考虑时间交叉的情况。

的确,我忘记加限制条件了
  1. select distinct(proid),min(sal) over(patition by proid) from t where proid in (select proid from t group by proid where count(*)>1);
复制代码
但是这个跟时间有什么关系?

使用道具 举报

回复
论坛徽章:
0
24#
发表于 2016-10-25 18:03 | 只看该作者
2011-09-06,2011-09-09,110,5
有没有考虑这种情况呢?
这种情况下,该行和2011-09-03的记录重叠,而2011-09-03的记录和2011-09-01的记录重叠

使用道具 举报

回复
论坛徽章:
6
2014年新春福章
日期:2014-02-18 16:49:31马上有钱
日期:2014-02-18 16:49:31优秀写手
日期:2014-02-21 06:00:13马上有车
日期:2014-10-09 10:14:53技术图书徽章
日期:2017-07-12 17:18:46妮可·罗宾
日期:2017-08-10 12:13:56
25#
发表于 2016-10-25 22:23 | 只看该作者
with tb as
(select 1 id ,'2011-09-01' bdate,'2011-09-05' edate,110 proid,10 prc from dual  
union all
select 1 id ,'2011-09-03' bdate,'2011-09-07' edate,110 proid,8 prc from dual  
union all
select 1 id ,'2011-09-08' bdate,'2011-09-12' edate,119 proid,100 prc from dual  
union all
select 1 id ,'2011-09-10' bdate,'2011-09-15' edate,119 proid,80 prc from dual

union all
select 1 id ,'2011-09-20' bdate,'2011-09-25' edate,120 proid,60 prc from dual
)
select proid,min(prc)keep(dense_rank first order by prc)prc
  from
    (select id,proid,prc, row_number()over(partition by proid order by id)rn from tb)
  where rn>=2
group by proid;

使用道具 举报

回复
论坛徽章:
0
26#
发表于 2016-10-26 17:44 | 只看该作者
楼主,不知道我的这个写法符合你的要求不?

with t as
(
select 1 id, date'2011-09-01' bdate, date'2011-09-05' edate, 110 proid, 10 prc from dual
union all
select 2,   date'2011-09-03' bdate, date'2011-09-07' edate,   110,     8 from dual
union all
select 3,   date'2011-09-08' bdate, date'2011-09-12' edate,   119,     100 from dual
union all
select 4,   date'2011-09-10' bdate, date'2011-09-15' edate,   119,     80 from dual
union all
select 5,   date'2011-09-20' bdate, date'2011-09-25' edate,   120,     60 from dual
)
select t.proid, min(prc) from t
group by t.proid
having count(1)>1
;

使用道具 举报

回复
论坛徽章:
3
ITPUB15周年纪念
日期:2016-10-13 13:15:34秀才
日期:2017-03-20 13:42:20秀才
日期:2017-03-28 15:59:38
27#
发表于 2016-10-26 18:11 | 只看该作者
tsh_1314 发表于 2016-10-26 17:44
楼主,不知道我的这个写法符合你的要求不?

with t as

没有判断时间交叉

使用道具 举报

回复
论坛徽章:
0
28#
发表于 2016-11-8 10:43 | 只看该作者
kelis2004 发表于 2016-10-26 18:11
没有判断时间交叉

时间交叉什么意思?谢谢

使用道具 举报

回复
论坛徽章:
3
ITPUB15周年纪念
日期:2016-10-13 13:15:34秀才
日期:2017-03-20 13:42:20秀才
日期:2017-03-28 15:59:38
29#
发表于 2016-11-11 14:28 | 只看该作者
qyinu 发表于 2016-11-8 10:43
时间交叉什么意思?谢谢

就是时间重叠,仔细看看楼主的要求

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表