2013-02-12 114 views
-1

我有一个表,像分组日期列在一周范围

Start_date timestamp, 
end_date timestamp, 
id number, 
cost number(10,2). 

列和我插入到表“中的数据会是这样

1,'2013-02-03 00:00:00','2013-02-03 00:00:00',75*0.06 
1,'2013-02-04 00:00:00','2013-02-04 00:00:00',75*0.06 
1,'2013-02-05 00:00:00','2013-02-05 00:00:00',75*0.06 
1,'2013-02-06 00:00:00','2013-02-06 00:00:00',75*0.06 
1,'2013-02-07 00:00:00','2013-02-07 00:00:00',75*0.06 
1,'2013-02-08 00:00:00','2013-02-08 00:00:00',75*0.06 
1,'2013-02-09 00:00:00','2013-02-09 00:00:00',75*0.06 

,现在我想星期日至星期六将列Start_dateend_date分组。

你能帮我解决这个问题吗?

在此先感谢。

+0

'一周(开始)'和'一周(END_DATE)'给你一周数;从那里你可以组 – SparKot 2013-02-12 17:16:42

+0

@Dileep - 添加一些样本数据和所需的输出。我个人不明白这是什么意思由星期六到星期六...你可以按日期或星期数或天数等来订购... – Art 2013-02-12 17:17:42

+0

@DoSparKot当我尝试像这样选择一周(start_date),星期(end_date)从表格1;它是投掷错误 – Dileep 2013-02-12 17:22:20

回答

0

这是我能为您提供的最好的解决方案,因为您的问题无法理解以及您提供的样本。 2013年ISO周表:

SELECT start_date -- 1/1/2013 -- 
, TRUNC(start_date, 'iw')     wk_starts 
, TRUNC(start_date, 'iw') + 7 - 1/86400 wk_ends 
, TO_NUMBER (TO_CHAR (start_date, 'IW')) ISO_wk#_iw 
, TO_CHAR(start_date, 'DAY')    wk_day 
FROM 
(
    SELECT TRUNC(SYSDATE, 'YEAR')-1 + LEVEL AS start_date 
    FROM dual 
CONNECT BY LEVEL <= 
(
    SELECT TRUNC(ADD_MONTHS (SYSDATE, 12), 'Y')-TRUNC(SYSDATE, 'Y') "Num of Days in 2013" 
    FROM dual 
) 
) 
/

START_DATE WK_STARTS WK_ENDS   ISO_WK# WK_DAY 
---------------------------------------------------------------------- 
1/1/2013 12/31/2012 1/6/2013 11:59:59 PM 1 TUESDAY 
1/2/2013 12/31/2012 1/6/2013 11:59:59 PM 1 WEDNESDAY 
..... 
1/7/2013 1/7/2013 1/13/2013 11:59:59 PM 2 MONDAY 
1/8/2013 1/7/2013 1/13/2013 11:59:59 PM 2 TUESDAY 
..... 

您可以通过它,我想添加任何其他格式的日期和秩序......

+0

与查询问题是我不能使用Trunc,因为我使用Netezza DB – Dileep 2013-02-12 17:38:59

+0

@Dileep - 你可以使用什么? ROUND()可能工作...如果TRUNC()是问题,那么你需要在Netezza中找到等价物。我从来没有听说过它。你在你的问题中有Oracle标签,所以,我假定Oracle查询会有所帮助,给一些想法... – Art 2013-02-12 17:39:47

+0

大部分oracle函数都会使用,但是我们不使用TRUNC,Level等那些。 – Dileep 2013-02-12 17:56:35