2

我需要 sql 在一个小组中进行 3 天。意味着像

4 Aug 2013 - 6 Aug 2013 as first group..
7 Aug 2013 - 9 Aug 2013 as second group..
10 Aug 2013 - 12 Aug 2013 as third group..

假设现在是 8 月 8 日,

5 Aug- 7 Aug group in first group
8 Aug - 10  group as second group
11 Aug - 13 Aug as third group

这是我的部分代码:

dense_rank() over (partition by **[3 days]**) order by wip.CURRENT_OPER desc)
as date_priority2,
4

2 回答 2

2

您可以为此使用WIDTH_BUCKET函数。这适用于数字和日期时间值。

SQL Fiddle上的演示

查询

select date_column,
       width_bucket(date_column,date'2013-08-05',date'2013-08-14',3) grp
from mytable
order by date_column

8 月 5 日 00:00:00 至 8 月 14 日 00:00:00 之间的日期分为 3 组。

  • 第一组为8月5日00:00:00至8月7日23:59:59。
  • 第二场从8月8日00:00:00到8月10日23:59:59。
  • 第三场从 8 月 11 日 00:00:00 到 8 月 13 日 23:59:59。
  • 从 8 月 14 日 00:00:00 开始的任何时间都将有第 4 组。
  • 8 月 5 日 00:00:00 以下的任何内容都将具有第 0 组。

结果

|                   DATE_COLUMN | GRP |
---------------------------------------
| August, 04 2013 23:59:59+0000 |   0 |
| August, 05 2013 00:00:00+0000 |   1 |
| August, 06 2013 00:00:00+0000 |   1 |
| August, 07 2013 00:00:00+0000 |   1 |
| August, 07 2013 23:59:59+0000 |   1 |
| August, 08 2013 00:00:00+0000 |   2 |
| August, 09 2013 00:00:00+0000 |   2 |
| August, 10 2013 00:00:00+0000 |   2 |
| August, 11 2013 00:00:00+0000 |   3 |
| August, 12 2013 00:00:00+0000 |   3 |
| August, 13 2013 00:00:00+0000 |   3 |
| August, 13 2013 23:59:59+0000 |   3 |
| August, 14 2013 00:00:00+0000 |   4 |

您可以在 partition by 子句中使用此组 no。

编辑 在不更改分区数量的情况下无法扩展最大限制。最好使用这样的东西

select date_column, ceil((trunc(date_column) - date'2013-08-04')/3) grp
from mytable
where date_column >= date'2013-08-05'
order by date_column;
于 2013-08-22T12:14:35.813 回答
0

您也可以尝试这样的事情(没有排名功能):

declare @firstday int = datediff(day,0,'20130804'), 
        @days_per_group int = 3

select mydate,
    (datediff(day,0,mydate)-@firstday) /@days_per_group + 1 as date_priority2
from t

小提琴演示

|     MYDATE | DATE_PRIORITY2 |
-------------------------------
| 2013-08-04 |              1 |
| 2013-08-05 |              1 |
| 2013-08-06 |              1 |
| 2013-08-07 |              2 |
| 2013-08-08 |              2 |
| 2013-08-09 |              2 |
| 2013-08-10 |              3 |
| 2013-08-11 |              3 |
| 2013-08-12 |              3 |
于 2013-08-22T08:37:39.523 回答