Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 带条件的数据透视表_Sql_Date_Datetime_Window - Fatal编程技术网

Sql 带条件的数据透视表

Sql 带条件的数据透视表,sql,date,datetime,window,Sql,Date,Datetime,Window,例如,我有一张桌子 day id event 1999-01-01 1 buy 1999-01-05 2 return 2000-01-10 3 buy 2000-05-12 1 return 我需要创建一个如下所示的表: month count_buy count_return_from_last_year 1999 2 2000 1 1 我想这可以通过窗

例如,我有一张桌子

day        id    event
1999-01-01  1     buy
1999-01-05  2     return
2000-01-10  3     buy
2000-05-12  1     return
我需要创建一个如下所示的表:

month     count_buy   count_return_from_last_year
1999      2            
2000      1           1
我想这可以通过窗口函数+自连接来解决,这应该可以做到:

计为 选择 截至年月日, count*过滤器,其中事件='buy'作为count\u buy, count*过滤器,其中事件='return'作为count\u return 从数据 按1分组 选择 月 你买什么, 每月退回订单的数量与上月退回的数量相同 从计数 按月订购; 但是请注意,要使滞后始终为前一个月,您需要对每个月进行计数。如果数据中存在漏洞,则滞后将选择上一个可用月份。为了解决这个问题,您首先必须参加一系列的月份活动:

计为 选择 将“yyy-MM”作为月份, count*过滤器,其中事件='buy'作为count\u buy, count*过滤器,其中事件='return'作为count\u return 从生成_系列‘1999-01-01’::日期,‘1999-12-01’::日期,‘1个月’作为月份 日期为“月”的左连接数据,日期=月 按1分组 选择 月 你买什么, 每月退回订单的数量与上月退回的数量相同 从计数 按月订购;