[英]SQL Query: Binary Fields on Dates for Time Series
我有一个表,如下所示:
ID | Date
1 | 2010-01-01
2 | 2010-02-01
3 | 2010-02-15
2 | 2010-02-15
4 | 2010-03-01
我在创建一个ID为行,时间段为列的表时遇到了麻烦。 对于给定的时间段,如果该ID在该时间段内具有关联的日期,我想放置1;如果没有,则放置0。
因此输出可能如下所示:
ID | Jan-10 | Feb-10 | Mar-10
1 | 1 | 0 | 0
2 | 0 | 1 | 0
3 | 0 | 1 | 0
4 | 0 | 0 | 1
做到这一点的最佳方法是什么?
我已经创建了一个新表,其中包含与上表中所有不同的ID,以期可以进行联接-但是我不确定如何处理1/0。
您可以使用简单的group by
和条件聚合来做到这一点:
select id,
max(case when month(t.date) = 1 and year(t.date) = 2010 then 1 else 0 end) as "Jan-10",
max(case when month(t.date) = 2 and year(t.date) = 2010 then 1 else 0 end) as "Feb-10",
max(case when month(t.date) = 3 and year(t.date) = 2010 then 1 else 0 end) as "Mar-10"
from "table" t
group by id;
因为您有很多时间段,所以我将使用Excel(或您喜欢的电子表格)中的公式为该列生成代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.