weekBegin
Syntax
weekBegin(X, [weekday=0], [offset], [n=1])
Details
Calculates the first date of the period containing the specified date(s) in X. By default, the period length is one week, and the period-starting day is specified by the weekday parameter. The default value of weekday is 6 (Sunday).
When both offset and n are specified (with n > 1), the function calculates period start dates based on n-week periods. In this case, offset determines how period boundaries are aligned. Specifically, the system first calculates the start date of the period containing offset according to weekday. This date is then used as the reference point, and a new period-starting boundary is generated every n weeks. The function returns the first day of the period to which X belongs.
Parameters
X is a scalar/vector of type DATE, DATETIME, DATEHOUR, TIMESTAMP or NANOTIMESTAMP, specifying the input date(s) or datetime(s) for which the period first date is to be calculated.
weekday (optional) is an integer from 0 to 6 specifies the week-starting day. 0 means Monday, 1 means Tuesday, ..., and 6 means Sunday. The default value is 0.
offset (optional) is a scalar of the same data type as X. It must be no greater than the minimum value of X.
When n > 1, offset is used to determine the alignment reference for multi-week periods. If offset is not specified, the minimum value in X is used as the default offset.
n (optional) is a positive integer that specifies the number of weeks in each period. The default value is 1. When n = 1, the function calculates period start dates based on calendar weeks and offset has no effect. When n > 1, the function calculates period start dates based on n-week periods, in which case both offset and n must be specified.
Returns
A scalar or vector of the DATE type.
Examples
Example 1
t = table(2017.12.01..2017.12.14 as date);
update t set weekday=weekday(date, false), weekBegin=weekBegin(date), weekBegin4=weekBegin(date,4);
t;
| date | weekday | weekBegin | weekBegin4 |
|---|---|---|---|
| 2017.12.01 | 4 | 2017.11.27 | 2017.12.01 |
| 2017.12.02 | 5 | 2017.11.27 | 2017.12.01 |
| 2017.12.03 | 6 | 2017.11.27 | 2017.12.01 |
| 2017.12.04 | 0 | 2017.12.04 | 2017.12.01 |
| 2017.12.05 | 1 | 2017.12.04 | 2017.12.01 |
| 2017.12.06 | 2 | 2017.12.04 | 2017.12.01 |
| 2017.12.07 | 3 | 2017.12.04 | 2017.12.01 |
| 2017.12.08 | 4 | 2017.12.04 | 2017.12.08 |
| 2017.12.09 | 5 | 2017.12.04 | 2017.12.08 |
| 2017.12.10 | 6 | 2017.12.04 | 2017.12.08 |
| 2017.12.11 | 0 | 2017.12.11 | 2017.12.08 |
| 2017.12.12 | 1 | 2017.12.11 | 2017.12.08 |
| 2017.12.13 | 2 | 2017.12.11 | 2017.12.08 |
| 2017.12.14 | 3 | 2017.12.11 | 2017.12.08 |
Example 2
t = table(2018.01.03+0..10*3 as date, 0..10 as x);
update t set weekday=weekday(date, false), weekBegin=weekBegin(date,,2018.01.02,2);
t;
| date | x | weekday | weekBegin |
|---|---|---|---|
| 2018.01.03 | 0 | 2 | 2018.01.01 |
| 2018.01.06 | 1 | 5 | 2018.01.01 |
| 2018.01.09 | 2 | 1 | 2018.01.01 |
| 2018.01.12 | 3 | 4 | 2018.01.01 |
| 2018.01.15 | 4 | 0 | 2018.01.15 |
| 2018.01.18 | 5 | 3 | 2018.01.15 |
| 2018.01.21 | 6 | 6 | 2018.01.15 |
| 2018.01.24 | 7 | 2 | 2018.01.15 |
| 2018.01.27 | 8 | 5 | 2018.01.15 |
| 2018.01.30 | 9 | 1 | 2018.01.29 |
| 2018.02.02 | 10 | 4 | 2018.01.29 |
Example 3
date=2012.10.02 2012.10.03 2012.10.07 2012.10.08 2012.10.12 2012.10.16 2012.10.18 2012.10.20 2012.10.25 2012.10.28
time=[09:34:07,09:36:42,09:36:51,09:36:59,09:32:47,09:35:26,09:34:16,09:34:26,09:38:12,09:38:13]
sym = take(`MSFT,10)
price= 49.6 29.46 29.52 30.02 174.97 175.23 50.76 50.32 51.29 52.38
qty = 2200 1900 2100 3200 6800 5400 1300 2500 8800 4500
t1 = table(date, time, sym, qty, price);
t1;
| date | time | sym | qty | price |
|---|---|---|---|---|
| 2012.10.02 | 09:34:07 | MSFT | 2200 | 49.6 |
| 2012.10.03 | 09:36:42 | MSFT | 1900 | 29.46 |
| 2012.10.07 | 09:36:51 | MSFT | 2100 | 29.52 |
| 2012.10.08 | 09:36:59 | MSFT | 3200 | 30.02 |
| 2012.10.12 | 09:32:47 | MSFT | 6800 | 174.97 |
| 2012.10.16 | 09:35:26 | MSFT | 5400 | 175.23 |
| 2012.10.18 | 09:34:16 | MSFT | 1300 | 50.76 |
| 2012.10.20 | 09:34:26 | MSFT | 2500 | 50.32 |
| 2012.10.25 | 09:38:12 | MSFT | 8800 | 51.29 |
| 2012.10.28 | 09:38:13 | MSFT | 4500 | 52.38 |
select avg(price),sum(qty) from t1 group by weekBegin(date, 4, 2012.10.01, 2);
| weekBegin_date | avg_price | sum_qty |
|---|---|---|
| 2012.09.28 | 34.65 | 9400 |
| 2012.10.12 | 100.514 | 24800 |
| 2012.10.26 | 52.38 | 4500 |
Related function: weekEnd
