-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathYears_sql
More file actions
39 lines (36 loc) · 1007 Bytes
/
Copy pathYears_sql
File metadata and controls
39 lines (36 loc) · 1007 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
WITH YEARS AS (
-- Find all years in your data
SELECT DISTINCT EXTRACT(YEAR FROM ISSUE_DATE) AS YEAR
FROM YOUR_TABLE
),
WINDOWS AS (
-- For each year, compute the first Sunday and last Saturday
SELECT
YEAR,
-- Compute first Sunday on or after Jan 1
CASE
WHEN DAYOFWEEK(DATE_FROM_PARTS(YEAR, 1, 1)) = 1
THEN DATE_FROM_PARTS(YEAR, 1, 1)
ELSE DATEADD(
DAY,
8 - DAYOFWEEK(DATE_FROM_PARTS(YEAR, 1, 1)),
DATE_FROM_PARTS(YEAR, 1, 1)
)
END AS FIRST_SUNDAY,
-- Compute last Saturday on or before Dec 31
CASE
WHEN DAYOFWEEK(DATE_FROM_PARTS(YEAR, 12, 31)) = 7
THEN DATE_FROM_PARTS(YEAR, 12, 31)
ELSE DATEADD(
DAY,
-DAYOFWEEK(DATE_FROM_PARTS(YEAR, 12, 31)),
DATE_FROM_PARTS(YEAR, 12, 31)
)
END AS LAST_SATURDAY
FROM YEARS
)
SELECT t.*
FROM YOUR_TABLE t
JOIN WINDOWS w
ON EXTRACT(YEAR FROM t.ISSUE_DATE) = w.YEAR
WHERE t.ISSUE_DATE BETWEEN w.FIRST_SUNDAY AND w.LAST_SATURDAY