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(*)