SQL 查询以根据日期创建字段
SQL Query to create a field based on Dates
我有一个数据集,其中一个 ID 按顺序通过阶段 A 到 D(A 到 B、B 到 C 和 C 到 D)。
我有时间戳来跟踪 ID 何时进入特定阶段。这是我的数据的样子
所以我有兴趣创建一个名为 'Status' 的 字段,它显示根据 A[=13= 的时间戳转换的 B、C、D 的数量]
例如;
19年8月'A'的数量=7
当A的时间戳为Aug'19(不考虑Date_B下的日期)时'B'转换的数量=5
A的时间戳为Aug'19时'C'转换的次数(不考虑Date_C下的日期)=5
当A的时间戳为Aug'19时转换的'D'个数(不考虑Date_D下的日期)=5
我尝试使用 union all, 但它的 给我 'Status' 实时意义 'date_B'在 id 1 下得到的日期是 Sept'19 而不是 Aug'19.This 是我使用的查询;
SELECT id,
CAST (Date_A AS DATE) AS 'Pivot Date',
'A' AS 'Status'
FROM table1
UNION ALL
SELECT id,
CAST (Date_B AS DATE) AS 'Pivot Date',
'B' AS 'Status'
FROM table1
UNION ALL
SELECT id,
CAST (Date_C AS DATE) AS 'Pivot Date',
'C' AS 'Status'
FROM table1
UNION ALL
SELECT id,
CAST (Date_D AS DATE) AS 'Pivot Date',
'D' AS 'Status'
FROM table1
有人能给我指出正确的方向吗?
谢谢!
我不确定这是否是您想要的,但试试这个:
SELECT
*, -- or only id or whatever
COUNT(date_a) OVER (PARTITION BY date_trunc('month', date_a)) AS a_of_the_month,
COUNT(date_b) OVER (PARTITION BY date_trunc('month', date_a)) AS already_converted_to_b,
COUNT(date_c) OVER (PARTITION BY date_trunc('month', date_a)) AS already_converted_to_c,
COUNT(date_d) OVER (PARTITION BY date_trunc('month', date_a)) AS already_converted_to_d
FROM table1;
也许您只想要月份和数字:
SELECT
date_trunc('month', date_a),
COUNT(date_a) AS a_of_the_month,
COUNT(date_b) AS already_converted_to_b,
COUNT(date_c) AS already_converted_to_c,
COUNT(date_d) AS already_converted_to_d
FROM table1
GROUP BY date_trunc('month', date_a);
在这两种情况下,如果必须始终设置 date_a
,您也可以将 COUNT(date_a)
替换为 COUNT(*)
。
我有一个数据集,其中一个 ID 按顺序通过阶段 A 到 D(A 到 B、B 到 C 和 C 到 D)。
我有时间戳来跟踪 ID 何时进入特定阶段。这是我的数据的样子
所以我有兴趣创建一个名为 'Status' 的 字段,它显示根据 A[=13= 的时间戳转换的 B、C、D 的数量]
例如; 19年8月'A'的数量=7 当A的时间戳为Aug'19(不考虑Date_B下的日期)时'B'转换的数量=5 A的时间戳为Aug'19时'C'转换的次数(不考虑Date_C下的日期)=5 当A的时间戳为Aug'19时转换的'D'个数(不考虑Date_D下的日期)=5 我尝试使用 union all, 但它的 给我 'Status' 实时意义 'date_B'在 id 1 下得到的日期是 Sept'19 而不是 Aug'19.This 是我使用的查询; 有人能给我指出正确的方向吗? 谢谢!SELECT id,
CAST (Date_A AS DATE) AS 'Pivot Date',
'A' AS 'Status'
FROM table1
UNION ALL
SELECT id,
CAST (Date_B AS DATE) AS 'Pivot Date',
'B' AS 'Status'
FROM table1
UNION ALL
SELECT id,
CAST (Date_C AS DATE) AS 'Pivot Date',
'C' AS 'Status'
FROM table1
UNION ALL
SELECT id,
CAST (Date_D AS DATE) AS 'Pivot Date',
'D' AS 'Status'
FROM table1
我不确定这是否是您想要的,但试试这个:
SELECT
*, -- or only id or whatever
COUNT(date_a) OVER (PARTITION BY date_trunc('month', date_a)) AS a_of_the_month,
COUNT(date_b) OVER (PARTITION BY date_trunc('month', date_a)) AS already_converted_to_b,
COUNT(date_c) OVER (PARTITION BY date_trunc('month', date_a)) AS already_converted_to_c,
COUNT(date_d) OVER (PARTITION BY date_trunc('month', date_a)) AS already_converted_to_d
FROM table1;
也许您只想要月份和数字:
SELECT
date_trunc('month', date_a),
COUNT(date_a) AS a_of_the_month,
COUNT(date_b) AS already_converted_to_b,
COUNT(date_c) AS already_converted_to_c,
COUNT(date_d) AS already_converted_to_d
FROM table1
GROUP BY date_trunc('month', date_a);
在这两种情况下,如果必须始终设置 date_a
,您也可以将 COUNT(date_a)
替换为 COUNT(*)
。