求高手幫忙,如何可以用sql取得特定格式的資料

sony33p89 2014-08-01 02:08:05
有一個表job,大概的欄位如下:
emp_no name expect_finish_date content category
1 A 2014/7/31 XXXXX XXXXX
2 B 2014/8/12 XXXXX XXXXX
1 A 2014/8/2 XXXXX XXXXX
3 C 2014/7/30 XXXXX XXXXX
2 B 2014/8/2 XXXXX XXXXX
3 C 2014/8/20 XXXXX XXXXX

我下sql :select * from job order by name ,expect_finish_date后

應該會出現:
emp_no name expect_finish_date
1 A 2014/7/31
1 A 2014/8/2
2 B 2014/8/2
2 B 2014/8/12
3 C 2014/7/30
3 C 2014/8/20

但是我現在想用每個人的最早的expect_finish_date(該欄位是DATE格式)作比較,就是: A 的2014/7/31 跟B的2014/8/2 跟C的2014/7/30去比較,C是最早
,然後我就想把C的所有工作列在最前面. A的第二早,跟在C的後面

我要的效果是:
emp_no name expect_finish_date
3 C 2014/7/30
3 C 2014/8/20
1 A 2014/7/31
1 A 2014/8/2
2 B 2014/8/2
2 B 2014/8/12

請問各位大神,應該怎麼樣下sql可以select出這樣的效果?partition by?不太會用這個函數.........
...全文
70 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhk383501372 2014-08-01
  • 打赏
  • 举报
回复
select t.num,s.name,s.expect_finish_date from job s ,(select name,ROW_NUMBER() over(order by min(expect_finish_date) asc) num from jobgroup by name) t where s.name=t.name order by t.num,s.expect_finish_date 思路和2楼一样
CT_LXL 2014-08-01
  • 打赏
  • 举报
回复
引用 楼主 sony33p89 的回复:
有一個表job,大概的欄位如下: emp_no name expect_finish_date content category 1 A 2014/7/31 XXXXX XXXXX 2 B 2014/8/12 XXXXX XXXXX 1 A 2014/8/2 XXXXX XXXXX 3 C 2014/7/30 XXXXX XXXXX 2 B 2014/8/2 XXXXX XXXXX 3 C 2014/8/20 XXXXX XXXXX 我下sql :select * from job order by name ,expect_finish_date后 應該會出現: emp_no name expect_finish_date 1 A 2014/7/31 1 A 2014/8/2 2 B 2014/8/2 2 B 2014/8/12 3 C 2014/7/30 3 C 2014/8/20 但是我現在想用每個人的最早的expect_finish_date(該欄位是DATE格式)作比較,就是: A 的2014/7/31 跟B的2014/8/2 跟C的2014/7/30去比較,C是最早 ,然後我就想把C的所有工作列在最前面. A的第二早,跟在C的後面 我要的效果是: emp_no name expect_finish_date 3 C 2014/7/30 3 C 2014/8/20 1 A 2014/7/31 1 A 2014/8/2 2 B 2014/8/2 2 B 2014/8/12 請問各位大神,應該怎麼樣下sql可以select出這樣的效果?partition by?不太會用這個函數.........


with t as
 (select 1 emp_no,
         'A' name,
         to_date('2014/07/31', 'yyyy/mm/dd') expect_finish_date
    from dual
  union all
  select 2 emp_no,
         'B' name,
         to_date('2014/08/12', 'yyyy/mm/dd') expect_finish_date
    from dual
  union all
  select 1 emp_no,
         'A' name,
         to_date('2014/08/02', 'yyyy/mm/dd') expect_finish_date
    from dual
  union all
  select 3 emp_no,
         'C' name,
         to_date('2014/07/30', 'yyyy/mm/dd') expect_finish_date
    from dual
  union all
  select 2 emp_no,
         'B' name,
         to_date('2014/08/02', 'yyyy/mm/dd') expect_finish_date
    from dual
  union all
  select 3 emp_no,
         'C' name,
         to_date('2014/08/20', 'yyyy/mm/dd') expect_finish_date
    from dual)
SELECT T1.EMP_NO, T1.NAME, T1.expect_finish_date, T2.RN
  FROM T T1,
       (SELECT NAME, ROWNUM RN
          FROM (SELECT NAME, MIN(expect_finish_date) MIN_DT
                  FROM T
                 GROUP BY NAME
                 ORDER BY MIN(expect_finish_date))) T2
 WHERE T1.NAME = T2.NAME
 ORDER BY T2.RN, T1.expect_finish_date;

17,086

社区成员

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

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