我需要部分查询的帮助。我正在尝试准确计算2列。在第一列中,我试图根据通话日期计算会计季度的周数。在第二列中,我想要汇总该特定星期的开始日期和结束日期。
我使用了以下查询,它在过去的两个季度中都运行良好,但是现在它不再能正常运行,我想这是因为当前季度从星期二(1/1/2019)开始。
, 1 + TRUNC((CALL_DATE - TRUNC(CALL_DATE, 'Q'))/7) as "Week in Quarter"
, TO_CHAR(TRUNC(CALL_DATE, 'IW'), 'MM/DD/YY') ||' - '|| TO_CHAR(TRUNC(CALL_DATE, 'IW') + 4, 'MM/DD/YY') as "Week Dates"
对于在星期一(2019年1月7日)完成的通话,这反映为“季度季度”列中的“周1”,实际上应视为“周2”。
此外,“周日期”列将该季度的第一周标记为“ 12/31/18-01/04/19”,而我希望将其设置为“ 01/01/19-01 / 04/19'。
无论该季度开始于哪个工作日,我如何更改此代码以使其适用于所有财政季度?几乎就像我需要一个案例来计算季度的第一周不同吗?
答案 0 :(得分:1)
您可以使用( TRUNC( call_date, 'IW' ) - TRUNC( TRUNC( call_date, 'Q' ), 'IW' ) ) / 7 + 1
查找该季度的星期几。
Oracle设置:
CREATE TABLE table_name ( call_date ) AS
SELECT DATE '2018-12-20' + LEVEL - 1
FROM DUAL
CONNECT BY LEVEL <= 20;
查询:
SELECT call_date,
( TRUNC( call_date, 'IW' ) - TRUNC( TRUNC( call_date, 'Q' ), 'IW' ) ) / 7 + 1
AS week_of_quarter,
GREATEST(
TRUNC( call_date, 'IW' ),
TRUNC( call_date, 'Q' )
) AS start_of_quarter_week,
LEAST(
TRUNC( call_date, 'IW' ) + INTERVAL '6' DAY,
ADD_MONTHS( TRUNC( call_date, 'Q' ), 3 ) - INTERVAL '1' DAY
) AS end_of_quarter_week
FROM table_name;
输出:
CALL_DATE | WEEK_OF_QUARTER | START_OF_QUARTER_WEEK | END_OF_QUARTER_WEEK :-------- | --------------: | :-------------------- | :------------------ 20-DEC-18 | 12 | 17-DEC-18 | 23-DEC-18 21-DEC-18 | 12 | 17-DEC-18 | 23-DEC-18 22-DEC-18 | 12 | 17-DEC-18 | 23-DEC-18 23-DEC-18 | 12 | 17-DEC-18 | 23-DEC-18 24-DEC-18 | 13 | 24-DEC-18 | 30-DEC-18 25-DEC-18 | 13 | 24-DEC-18 | 30-DEC-18 26-DEC-18 | 13 | 24-DEC-18 | 30-DEC-18 27-DEC-18 | 13 | 24-DEC-18 | 30-DEC-18 28-DEC-18 | 13 | 24-DEC-18 | 30-DEC-18 29-DEC-18 | 13 | 24-DEC-18 | 30-DEC-18 30-DEC-18 | 13 | 24-DEC-18 | 30-DEC-18 31-DEC-18 | 14 | 31-DEC-18 | 31-DEC-18 01-JAN-19 | 1 | 01-JAN-19 | 06-JAN-19 02-JAN-19 | 1 | 01-JAN-19 | 06-JAN-19 03-JAN-19 | 1 | 01-JAN-19 | 06-JAN-19 04-JAN-19 | 1 | 01-JAN-19 | 06-JAN-19 05-JAN-19 | 1 | 01-JAN-19 | 06-JAN-19 06-JAN-19 | 1 | 01-JAN-19 | 06-JAN-19 07-JAN-19 | 2 | 07-JAN-19 | 13-JAN-19 08-JAN-19 | 2 | 07-JAN-19 | 13-JAN-19
db <>提琴here
答案 1 :(得分:0)
对于SQL Server / T-SQL,您可以使用此代码获取季度的星期。
1+(DATEPART(WW,[call_date])-DATEPART(WW,DATEADD(QQ,DATEDIFF(QQ,0,[call_date]),0)))