【问题标题】:Grouping the date columns in week range在周范围内对日期列进行分组
【发布时间】:2013-01-28 01:56:02
【问题描述】:

我有一张桌子和像这样的列

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 进行分组。

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

提前致谢。

【问题讨论】:

  • week(start_date)week(end_date) 为您提供周数;从那里你可以分组
  • @Dileep - 添加一些样本数据和所需的输出。我个人不明白按周日到周六分组是什么意思...您可以按日期或周数或天数等...
  • @DoSparKot 当我像这样尝试时 select week(start_date),week(end_date) from table1;它正在抛出错误
  • @Art sample data 'll be like this 1,'2012-12-23 00:00:00','2012-12-23 00:00:00',null,null,343 *0.06
  • 一行样本数据和没有预期的输出对我们没有多大帮助。你如何按两个不同的列分组?尤其是当这两列落在不同的几周时?

标签: mysql sql oracle oracle10g netezza


【解决方案1】:

这是我能为您提供的最好的,因为您的问题和您提供的示例一样无法理解。 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
.....

我猜你可以为你的日期和订单添加任何其他格式...

【讨论】:

  • 查询的问题是我不能使用 Trunc,因为我使用的是 Netezza DB
  • @Dileep - 你能用什么? ROUND() 可能工作...如果 TRUNC() 是问题,那么您需要在 Netezza 中找到等效的。我从来没有听说过。您的问题中有 Oracle 标签,所以,我认为 Oracle 查询会有所帮助,请给出一些想法...
  • 大部分oracle函数都会用到,但我们不能使用TRUNC、Level等一些函数。
  • 我需要您提供的确切 o/p,但是当我尝试使用 Netezza 中的相应更改进行查询时,它会抛出错误发现“START_DATE”(在字符 130)期待 USING' or ') '' 或 `',''
  • @Dileep - 非常抱歉,无法帮助您处理 Netezza...我只使用 LEVEL 来即时构建表格。你不需要使用它——你已经有了包含数据的表格。尝试在 Netezza 中查找与 Oracle TRUNC/ROUND 函数等效的函数。
猜你喜欢
  • 2010-10-29
  • 2016-01-09
  • 2023-01-28
  • 2023-01-13
  • 2013-11-25
  • 2016-12-08
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
相关资源
最近更新 更多